#include #include #include #include #include /* pipe.c */ void fils(int tube[2]) { dup2(tube[0],STDIN_FILENO); /* tube[0] => Entree standard */ close(tube[0]); /* Il est donc maintenant possible de fermer tube[0] */ close(tube[1]); /* ESSENTIEL : pour la fin du tube */ execlp("wc","wc","-c",NULL); perror("execlp"); } void pere(int tube[2]) { int ok = 0 ; int ch; close(tube[0]); /* Le pere ne lit pas dans le tube */ printf("Entrez des caracteres et terminez par CTRL+D (^D): \n"); while ((ch=getchar())!=EOF) { ok = write(tube[1],&ch,1); if (ok==-1) { perror("write"); break; } } close(tube[1]); wait(NULL); } int main(void) { int tube[2]; pid_t pid = 0; if (pipe(tube) != 0) { perror("pipe"); exit(EXIT_FAILURE); } pid = fork(); switch (pid) { case -1 : perror("fork"); exit(EXIT_FAILURE); break; case 0 : fils(tube); break; default : pere(tube); break; } return EXIT_SUCCESS; }