/// demo_pipe_fork : ... /// - Demande de descripteurs de pipe line, /// - demande de fork, /// - PERE : lit des car. au clavier, ecrit dans le pipe-line /// (apres fermeture du descr. inutile), /// - FILS : lit dans le pipe-line, ecrit les car. recus /// (apres fermeture du descr. inutile), #include #include # define READ 0 # define WRITE 1 int main () { int pid , tabpipe[2]; FILE *stream; char c; char * type; pipe (tabpipe); /// Retour à tester pid = fork(); if (pid < 0) printf ("ERREUR FORK"); else if (pid == 0) { /// FILS : LIT DANS LE PIPE-LINE type = "r"; stream = fdopen (tabpipe[0], type); close (tabpipe[WRITE]); /// Lecture dans le pipe-line, ecriture sur stdout c = fgetc(stream); while ( c != EOF) { printf("Car. recu : %c \n",c); fflush (stdout); c = fgetc(stream); } } else { /// PERE : ECRIT DANS LE PIPE-LINE printf ("Message a envoyer (ctrl.D pour finir) : "); close ( tabpipe[READ] ); type ="w"; stream = fdopen (tabpipe[1], type); /// Lecture sur stdin, ecriture dans le pipe-line c=getchar(); while ( c != EOF) { fputc(c, stream); fflush (stream); c=getchar(); } /// Production de la fin de fichier fclose (stream); } return 0; }