From: Simone Piccardi Date: Fri, 1 Jan 2010 16:20:38 +0000 (+0000) Subject: Prototipo preadv e pwritev X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=2f558e59b875dd50e152d4be13b302c675c62c58 Prototipo preadv e pwritev --- diff --git a/fileadv.tex b/fileadv.tex index 90369e1..117d9b9 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -3884,17 +3884,36 @@ corrispondenti a quanto aspettato. Come per le normali operazioni di lettura e scrittura, anche per l'\textsl{I/O vettorizzato} si pone il problema di poter effettuare le operazioni in -maniera atomica a partire da un certa posizione sul file; per questo motivo a -partire dal kernel 2.6.30 sono state introdotte anche per l'\textsl{I/O - vettorizzato} le analoghe delle funzioni \func{pread} e \func{pwrite} (vedi -sez.~\ref{sec:file_read} e \ref{sec:file_write}) che consentono di effettuare -letture e scritture vettorizzate a partire da una certa posizione. Le due -funzioni sono \funcd{preadv} e \func{pwritev} ed i rispettivi prototipi sono: +maniera atomica a partire da un certa posizione sul file, così da evitare +eventuali \itindex{race~condition} \textit{race conditions} in caso di +combinazione con l'uso di \func{lseek}. Per questo motivo a partire dal kernel +2.6.30 sono state introdotte anche per l'\textsl{I/O vettorizzato} le analoghe +delle funzioni \func{pread} e \func{pwrite} (vedi sez.~\ref{sec:file_read} e +\ref{sec:file_write}); le due funzioni sono \funcd{preadv} e \func{pwritev} ed +i rispettivi prototipi sono: +\begin{functions} + \headdecl{sys/uio.h} + + \funcdecl{int preadv(int fd, const struct iovec *vector, int count, off\_t + offset)} + \funcdecl{int pwritev(int fd, const struct iovec *vector, int count, off\_t + offset)} -% 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/ + Eseguono una lettura o una scrittura vettorizzata a partire da una data + posizione sul file. + + \bodydesc{Le funzioni hanno gli stessi valori di ritorno e gli stessi errori + delle corrispondenti \func{readv} e \func{writev} a cui si può aggiungere: + \begin{errlist} + \item[\errcode{EOVERFLOW}] \param{offset} ha un valore che non può essere + usato come \ctyp{off\_t}. + \item[\errcode{ESPIPE}] \param{fd} è associato ad un socket o una pipe. + \end{errlist} +} +\end{functions} +% TODO preadv e pwritev inserite nel kernel 2.6.30, vedi +% http://lwn.net/Articles/326818/ \subsection{L'I/O diretto fra file descriptor: \func{sendfile} e