Correzioni varie per splice
[gapil.git] / listati / splicecp.c
1 #define _GNU_SOURCE
2 #include <fcntl.h>       /* file control functions */
3 ...
4
5 int main(int argc, char *argv[])
6 {
7     int size = 4096;
8     int pipefd[2];
9     int in_fd, out_fd;
10     int nread, nwrite;
11     ...
12     /* copy loop */
13     while (1) {
14         nread = splice(in_fd, NULL, pipefd[1], NULL, size, 
15                        SPLICE_F_MOVE|SPLICE_F_MORE);
16         if (nread == 0) break;
17         if (nread < 0) {
18             if (errno == EINTR) {
19                 continue;
20             } else {
21                 perror("read error");
22                 exit(EXIT_FAILURE);
23             } 
24         }
25         while (nread > 0) {
26             nwrite = splice(pipefd[0], NULL, out_fd, NULL, nread, 
27                             SPLICE_F_MOVE|SPLICE_F_MORE);
28             if (nwrite < 0) {
29                 if (errno == EINTR)
30                     continue;
31                 else {
32                     perror("write error");
33                     exit(EXIT_FAILURE);
34                 }
35             }
36             nread -= nwrite;
37         }
38     }
39     return EXIT_SUCCESS;
40 }