X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=fileadv.tex;h=3e26a51cf79e429c6aad4e7c81f8f4090a90860e;hp=84d51c551aa3e2eb0dafb6b7d68a8dc545b15d0e;hb=8b674096ce07c5809c4b3520fa5b093d25f99ef2;hpb=ee41e8b34dd560d230966160fb3eb748defc3e46 diff --git a/fileadv.tex b/fileadv.tex index 84d51c5..3e26a51 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -277,7 +277,7 @@ precedenti, ed inoltre aggiunge a \func{select} una nuova funzione \end{prototype} La funzione è sostanzialmente identica a \func{select}, solo che usa una -struttura \struct{timespec} (vedi fig.~\ref{fig:sys_timeval_struct}) per +struttura \struct{timespec} (vedi fig.~\ref{fig:sys_timespec_struct}) per indicare con maggiore precisione il timeout e non ne aggiorna il valore in caso di interruzione.\footnote{in realtà la system call di Linux aggiorna il valore al tempo rimanente, ma la funzione fornita dalle \acr{glibc} modifica @@ -974,12 +974,11 @@ Per far questo per (vedi sez.~\ref{sec:sig_real_time}) impostando esplicitamente con il comando \const{F\_SETSIG} di \func{fcntl} un segnale real-time da inviare in caso di I/O asincrono (il segnale predefinito è \const{SIGIO}). In questo caso il -gestore, tutte le volte che riceverà \const{SI\_SIGIO} come valore del -campo \var{si\_code}\footnote{il valore resta \const{SI\_SIGIO} qualunque sia - il segnale che si è associato all'I/O asincrono, ed indica appunto che il - segnale è stato generato a causa di attività nell'I/O asincrono.} di -\struct{siginfo\_t}, troverà nel campo \var{si\_fd} il valore del file -descriptor che ha generato il segnale. +gestore, tutte le volte che riceverà \const{SI\_SIGIO} come valore del campo +\var{si\_code}\footnote{il valore resta \const{SI\_SIGIO} qualunque sia il + segnale che si è associato all'I/O, ed indica appunto che il segnale è stato + generato a causa di attività di I/O.} di \struct{siginfo\_t}, troverà nel +campo \var{si\_fd} il valore del file descriptor che ha generato il segnale. Un secondo vantaggio dell'uso dei segnali real-time è che essendo questi ultimi dotati di una coda di consegna ogni segnale sarà associato ad uno solo @@ -988,7 +987,7 @@ risposta a seconda del segnale usato, dato che i segnali real-time supportano anche questa funzionalità. In questo modo si può identificare immediatamente un file su cui l'accesso è diventato possibile evitando completamente l'uso di funzioni come \func{poll} e \func{select}, almeno fintanto che non si satura -la coda. +la coda. Se infatti si eccedono le dimensioni di quest'ultima, il kernel, non potendo più assicurare il comportamento corretto per un segnale real-time, invierà al @@ -1740,6 +1739,9 @@ raggruppati in un solo evento. \index{file!inotify|)} +% TODO trattare fanotify, vedi http://lwn.net/Articles/339399/ e +% http://lwn.net/Articles/343346/ + \subsection{L'interfaccia POSIX per l'I/O asincrono} \label{sec:file_asyncronous_io} @@ -2734,6 +2736,8 @@ mappatura che gi \itindend{memory~mapping} +% TODO documentare \func{madvise} + \subsection{I/O vettorizzato: \func{readv} e \func{writev}} \label{sec:file_multiple_io} @@ -2823,6 +2827,7 @@ ma si perder % TODO verificare cosa succederà a preadv e pwritev o alla nuova niovec % vedi http://lwn.net/Articles/164887/ +% inserite nel kernel 2.6.30, vedi http://lwn.net/Articles/326818/ \subsection{L'I/O diretto fra file descriptor: \func{sendfile} e \func{splice}} @@ -3563,8 +3568,8 @@ saranno incrementate di conseguenza. Dopo aver eseguito con successo la funzione è garantito che una scrittura nella regione indicata non fallirà per mancanza di spazio disco. +% TODO controllare la trattazione della nuova funzionalità di preallocazione - % TODO documentare \func{posix\_fadvise} % vedi http://insights.oetiker.ch/linux/fadvise.html % questo tread? http://www.ussg.iu.edu/hypermail/linux/kernel/0703.1/0032.html