#include main(char * argv[],int argc) { char a[10]; int pid,fd[2], fd1[2], fd2[2]; int c; int i; if (pipe(fd2) == -1) { fprintf(stderr," pipe failed \n"); exit(-1); } if (pipe(fd) == -1) { fprintf(stderr," pipe failed \n"); exit(-1); } if (pipe(fd1) == -1) { fprintf(stderr," pipe failed \n"); exit(-1); } switch (pid = fork()) { case -1 : fprintf(stderr," fork failed \n"); exit(-2); case 0 : if (close(fd[1]) == -1) /* child process */ { fprintf(stderr," close\n"); exit(-3); } sleep(5); if ((c = read(fd[0],a,10)) < 0) fprintf(stderr," read error\n"); else { a[c] = 0; printf("message received %s\n",a); if (write(fd1[1],"child0",6) <= 0) fprintf(stderr,"error in 0\n"); } if (write(fd2[1],"msg1",4) < 0) fprintf(stderr,"error in child writing\n"); exit(0); default : /* parent process */ pid = fork(); if (pid == 0) /* another child */ { if ((c = read(fd[0],a,10)) < 0) fprintf(stderr," read error\n"); else { a[c] = 0; printf("message received in 1 %s\n",a); if (write(fd1[1],"child1",6) <= 0) fprintf(stderr,"error in 1\n"); } if ((c = read(fd2[0],a,10)) < 0) fprintf(stderr, "error reading\n"); else { a[c] = 0; printf(" read in second child %s\n",a); } exit(0); } } if (close(fd[0]) == -1) { fprintf(stderr," close2 \n"); exit(-4); } if (write(fd[1],"hello",5) == -1) { fprintf(stderr," write error \n"); exit(-5); } i = 6; if (write(fd[1],"hello1", 6) == -1) { fprintf(stderr," write int error \n"); exit(-6); } if ((c = read(fd1[0],a,10)) < 0) fprintf(stderr, " read error\n"); a[c] = 0; printf("%s\n",a); if ((c = read(fd1[0],a,10)) < 0) fprintf(stderr, " read error\n"); a[c] = 0; printf("%s\n",a); while (wait((int *)0) != pid) /* wait child to terminate */ ; }