#include #include #include #include int main(int argc, char * argv[]){ int fils1, fils2; int tube[2]; if(pipe(tube)<0){ perror("erreur pipe"); exit(1); } if((fils1=fork())<0){ perror("erreur exec du fork"); exit(1); } if(fils1 == 0){ close(tube[0]); //fils 1 ne lit pas dup2(tube[1],1); if(execlp("cat","cat","/etc/passwd",NULL)==-1){ perror("echec execlp"); exit(1); } } else { if((fils2=fork())<0){ perror("erreur exec du fork"); exit(1); } if(fils2 == 0){ close(tube[1]); //fils 2 n'écrit pas dup2(tube[0],0); if(execlp("wc","ws",NULL)==-1){ perror("echec execlp"); exit(1); } } else{ int r, pid; close(tube[1]); close(tube[0]); if((pid= wait(&r)) <0){ perror("erreur exec du wait"); exit(1); } if((pid= wait(&r)) <0){ perror("erreur exec du wait"); exit(1); } printf("\nDans le père, traitement fini\n"); } } return 0; }