Commenti al problema di {{{SPLICE_F_NONBLOCK}}} e correzione del
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 21 Aug 2007 23:40:26 +0000 (23:40 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 21 Aug 2007 23:40:26 +0000 (23:40 +0000)
listato.

fileadv.tex
listati/tee.c

index 206fb8e8aa38898aadf059a99b7f1dc09d0bb79c..ce771c96a67cfe63043a7fb59c5c1274d435e40d 100644 (file)
@@ -3287,16 +3287,16 @@ comportamento delle \textit{pipe} si veda sez.~\ref{sec:ipc_unix}).
 
 La funzione restituisce il numero di byte copiati da una \textit{pipe}
 all'altra (o $-1$ in caso di errore), un valore nullo indica che non ci sono
-byte disponibili da copiare (la funzione in questo caso non si blocca, a
-differenza di quanto avverrebbe per una normale lettura). Un esempio di
-realizzazione del comando \texttt{tee} usando questa funzione, ripreso da
-quello fornito nella pagina di manuale e dall'esempio allegato al pacth
-originale, è riportato in fig.~\ref{fig:tee_example}. Il programma consente di
-copiare il contenuto dello standard input sullo standard output e su un file
-specificato come argomento, il codice completo si trova nel file
-\texttt{tee.c} dei sorgenti allegati alla guida.
-
-% TODO verificare funzionamento, su Ubuntu Feisty non va...
+byte disponibili da copiare e che il capo in scrittura della pipe è stato
+chiuso.\footnote{si tenga presente però che questo non avviene se si è
+  impostato il flag \const{SPLICE\_F\_NONBLOCK}, in tal caso infatti si
+  avrebbe un errore di \errcode{EAGAIN}.} Un esempio di realizzazione del
+comando \texttt{tee} usando questa funzione, ripreso da quello fornito nella
+pagina di manuale e dall'esempio allegato al pacth originale, è riportato in
+fig.~\ref{fig:tee_example}. Il programma consente di copiare il contenuto
+dello standard input sullo standard output e su un file specificato come
+argomento, il codice completo si trova nel file \texttt{tee.c} dei sorgenti
+allegati alla guida.
 
 \begin{figure}[!htbp]
   \footnotesize \centering
index 51df9f665667c9e6e2dbaae7a2cc5aed20fa21b4..6fb203ac4285431929ce886762a29679b94eb592 100644 (file)
@@ -36,7 +36,7 @@ int main(int argc, char *argv[])
     /* tee loop */
     while (1) {
         /* copy stdin to stdout */
-        len = tee(STDIN_FILENO, STDOUT_FILENO, size, SPLICE_F_NONBLOCK);
+        len = tee(STDIN_FILENO, STDOUT_FILENO, size, 0);
        if (len == 0) break;
         if (len < 0) {
             if (errno == EAGAIN) {