#include #include #include #include #include #include #include int fdTS[2], fdTC[2]; void pDie(int p) { close(fdTS[0]); close(fdTS[1]); close(fdTC[0]); close(fdTC[1]); printf("\nBye Now\n"); exit(0); } void chDie(int p) { wait(0); signal(SIGCHLD, chDie); } int main() { int ch; signal(SIGINT, pDie); signal(SIGCHLD, chDie); pipe(fdTS); pipe(fdTC); while(1) { ch = fork(); if(ch == 0) { printf(" ---- New child ---- \n"); int ok = 1; while(ok) { int c; printf("Enter number:"); scanf("%d", &c); write(fdTS[1], &c, sizeof(int)); read(fdTC[0], &ok, sizeof(int)); } int sum; read(fdTC[0], &sum, sizeof(int)); printf("Sum: %d\n", sum); exit(0); } else if( ch > 0) { int numb = 0, sum = 0; do { sum = sum + numb; read(fdTS[0], &numb, sizeof(int)); if(numb > 0) { int ok = 1; write(fdTC[1], &ok, sizeof(int)); } }while(numb > 0); int ok = 0; write(fdTC[1], &ok, sizeof(int)); write(fdTC[1], &sum, sizeof(int)); } } }