#include #include #include #include main(int argc, char *argv[]) { int f_des[2], i, j; static char message[BUFSIZ]; if(argc != 2) { fprintf(stderr, "Usage: %s message\n", argv[0]); exit(1); } if(pipe(f_des) == -1) { perror("pipe"); exit(2); } close(f_des[1]); switch(fork()) { case -1: perror("fork"); exit(3); case 0: // close(f_des[1]); if(i=read(f_des[0], message, BUFSIZ) != -1) { printf("child inner %d\n", i); printf("message recived by child: %s\n", message); fflush(stdout); } else { printf("child outer %d\n", i); perror("read"); exit(3); } break; default: close(f_des[0]); if(j=write(f_des[1], argv[1], strlen(argv[1])) != -1) { printf("parent inner %d\n", j); printf("message sent by parent: %s\n", argv[1]); fflush(stdout); } else { printf("parent outer %d\n", j); perror("write"); exit(5); } } exit(0); }