#include #include #include #include #include #include #include #include #include main(int argc, char **argv) { int tube1[2]; int tube2[2]; int tube3[2]; int pid; int x; int y; pipe(tube1); pipe(tube2); pipe(tube3); pid = fork(); if(pid == -1) perror("fork"); if(pid == 0) { /* code du fils1 */ close(tube1[1]); close(tube2[0]); close(tube3[1]); close(tube3[0]); while(read(tube1[0],&x,sizeof(int))>0) { y = x+1; write(tube2[1],&y,sizeof(int));} close(tube2[1]); close(tube1[0]); exit(0); } pid = fork(); if(pid == -1) perror("fork"); if(pid == 0) { /* code du fils2 */ close(tube2[1]); close(tube3[0]); close(tube1[1]); close(tube1[0]); while(read(tube2[0],&x,sizeof(int))>0) { y = x+1; write(tube3[1],&y,sizeof(int));} close(tube3[1]); close(tube2[0]); exit(0); } /* code du père */ close(tube2[1]); close(tube2[0]); close(tube3[1]); close(tube1[0]); y=1; write(tube1[1],&y,sizeof(int)); read(tube3[0],&x,sizeof(int)); while(x<=100) { y = x+1; write(tube1[1],&y,sizeof(int)); read(tube3[0],&x,sizeof(int)); } printf("%d \n",x); close(tube1[1]); close(tube3[0]); wait(NULL); wait(NULL); exit(0); }