X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=75bc689c8237e264686baaf65720a0b69211c13d;hp=f29a8efe9e54bef4465268860912445ac8f37487;hb=adbc2a4478d606025705a406603e6097584b9fa0;hpb=5eaf11a5e3e4daaee677554b68f4ba3c92c67b84 diff --git a/fileadv.tex b/fileadv.tex index f29a8ef..75bc689 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -476,8 +476,8 @@ struct sigevent sigval_t sigev_value; int sigev_signo; int sigev_notify; - sigev_notify_function; - sigev_notify_attributes; + void (*sigev_notify_function)(sigval_t); + pthread_attr_t *sigev_notify_attributes; }; \end{lstlisting} \end{minipage} @@ -493,15 +493,17 @@ notifica del completamento delle operazioni richieste. La struttura riportata in \secref{fig:file_sigevent}; il campo \var{sigev\_notify} è quello che indica le modalità della notifica, esso può assumere i tre valori: \begin{basedescript}{\desclabelwidth{3.0cm}} -\item[\const{SIGEV\_NONE}] Non viene inviata nessuna notifica. +\item[\const{SIGEV\_NONE}] Non viene inviata nessuna notifica. \item[\const{SIGEV\_SIGNAL}] La notifica viene effettuata inviando al processo - chiamante il segnale specificato nel campo \var{sigev\_signo}, se il - gestore è installato con \const{SA\_SIGINFO}, il gli verrà restituito - il valore di \var{sigev\_value} in come valore del campo \var{si\_value} per + chiamante il segnale specificato da \var{sigev\_signo}; se il gestore di + questo è stato installato con \const{SA\_SIGINFO} gli verrà restituito il + valore di \var{sigev\_value} (la cui definizione è in + \figref{fig:sig_sigval}) come valore del campo \var{si\_value} di \struct{siginfo\_t}. \item[\const{SIGEV\_THREAD}] La notifica viene effettuata creando un nuovo - thread che esegue la funzione specificata da \var{sigev\_notify\_function}, - con gli attributi specificati da \var{sigev\_notify\_attribute}. + thread che esegue la funzione specificata da \var{sigev\_notify\_function} + con argomento \var{sigev\_value}, e con gli attributi specificati da + \var{sigev\_notify\_attribute}. \end{basedescript} Le due funzioni base dell'interfaccia per l'I/O asincrono sono @@ -1130,14 +1132,14 @@ Pertanto se si modifica un file con l'interfaccia standard queste modifiche potranno essere visibili o meno a seconda del momento in cui la memoria virtuale trasporterà dal disco in memoria quella sezione del file, perciò è del tutto imprevedibile il risultato della modifica di un file nei confronti -del contenuto della memoria mappata su cui è mappato. - -Per quanto appena visto, è sempre sconsigliabile eseguire scritture su file -attraverso l'interfaccia standard, quando lo si è mappato in memoria, è invece -possibile usare l'interfaccia standard per leggere un file mappato in memoria, -purché si abbia una certa cura; infatti l'interfaccia dell'I/O mappato in -memoria mette a disposizione la funzione \funcd{msync} per sincronizzare il -contenuto della memoria mappata con il file su disco; il suo prototipo è: +del contenuto della memoria su cui è mappato. + +Per questo, è sempre sconsigliabile eseguire scritture su file attraverso +l'interfaccia standard, quando lo si è mappato in memoria, è invece possibile +usare l'interfaccia standard per leggere un file mappato in memoria, purché si +abbia una certa cura; infatti l'interfaccia dell'I/O mappato in memoria mette +a disposizione la funzione \funcd{msync} per sincronizzare il contenuto della +memoria mappata con il file su disco; il suo prototipo è: \begin{functions} \headdecl{unistd.h} \headdecl{sys/mman.h}