Prototipo preadv e pwritev
authorSimone Piccardi <piccardi@gnulinux.it>
Fri, 1 Jan 2010 16:20:38 +0000 (16:20 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Fri, 1 Jan 2010 16:20:38 +0000 (16:20 +0000)
fileadv.tex

index 90369e13dbcadf3fb47e53d699c6156385aa8ec5..117d9b93a16f4472ec01ddf20e9483b85c53f09c 100644 (file)
@@ -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
 
 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
 
 
 \subsection{L'I/O diretto fra file descriptor: \func{sendfile} e