#include #include #include #include #include /* pipe.c */ void fils(int tube[2]) { int ok = 0; char ch; int compteur=0; close(tube[1]); /* Le fils n'ecrit pas dans le tube */ /* FONDAMENTAL pour atteindre la "fin du tube" ! */ ok=read(tube[0],&ch,1); while ((ok!=-1) && (ok!=0)) { compteur++; #if 0 printf("Recu %c\n",ch); #endif ok=read(tube[0],&ch,1); } if (ok==-1) { perror("read"); exit(EXIT_FAILURE); } printf("Recu %d caracteres\n",compteur); close(tube[0]); } 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; }