From: Simone Piccardi Date: Tue, 21 Aug 2007 23:40:26 +0000 (+0000) Subject: Commenti al problema di {{{SPLICE_F_NONBLOCK}}} e correzione del X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=bcf0e2e6a5cfeafb046fa8dfc43d789c7998e42d;p=gapil.git Commenti al problema di {{{SPLICE_F_NONBLOCK}}} e correzione del listato. --- diff --git a/fileadv.tex b/fileadv.tex index 206fb8e..ce771c9 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -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 diff --git a/listati/tee.c b/listati/tee.c index 51df9f6..6fb203a 100644 --- a/listati/tee.c +++ b/listati/tee.c @@ -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) {