Il flag {{{SPLICE_F_NONBLOCK}}} fa si che ritorni {{{EAGAIN}}} anche
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 21 Aug 2007 18:07:07 +0000 (18:07 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 21 Aug 2007 18:07:07 +0000 (18:07 +0000)
quando la pipe in ingresso non contiene dati, se non lo si usa in quel
caso {{{tee}}} ritorna semplicemente con un valore nullo.

sources/tee.c

index 559c94987cf010ed516e64cf280a96abbab8c731..d876ad998c31cd7a9f7381de8ef976f38497f959 100644 (file)
@@ -115,7 +115,8 @@ int main(int argc, char *argv[])
     /* tee loop */
     while (1) {
         /* copy stdin to stdout */
     /* 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);
+       fprintf(stderr, "Copied %d byte\n", len); /* debug (use stderr!) */
        if (len == 0) break;
         if (len < 0) {
             if (errno == EAGAIN) {
        if (len == 0) break;
         if (len < 0) {
             if (errno == EAGAIN) {
@@ -125,7 +126,6 @@ int main(int argc, char *argv[])
                exit(EXIT_FAILURE);
            }
         }
                exit(EXIT_FAILURE);
            }
         }
-       fprintf(stderr, "Copied %d byte\n", len); /* debug (use stderr!) */
         /* write data to the file using splice */
         while (len > 0) {
             nwrite = splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
         /* write data to the file using splice */
         while (len > 0) {
             nwrite = splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);