#include #include #include #include #include #include int main(int argc, char *argv[]) { int p2c[2], c2p[2]; if (0 > pipe(p2c)) { perror("Error on pipe p2c"); exit(1); } if (0 > pipe(c2p)) { perror("Error on pipe c2p"); exit(1); } int f = fork(); if (0 > f) { perror("Error on fork"); exit(1); } else if (0 == f) { close(p2c[1]); close(c2p[0]); int n; while(1) { if (0 > read(p2c[0], &n, sizeof(int))) { perror("Error on child read"); } printf("Child received %d\n", n); n /= 2; printf("Child sending %d\n", n); if (0 > write(c2p[1], &n, sizeof(int))) { perror("Error on child write"); } if(n < 5) break; } close(p2c[0]); close(c2p[1]); exit(0); } else { close(p2c[0]); close(c2p[1]); srandom(time(NULL)); int n = random() % 151 + 50; printf("Parent generated %d\n", n); while(n >= 5) { if(n % 2 == 1) n++; printf("Parent sending %d\n", n); if (0 > write(p2c[1], &n, sizeof(int))) { perror("Error on parent write"); } if (0 > read(c2p[0], &n, sizeof(int))) { perror("Error on parent read"); } printf("Parent received %d\n", n); } wait(0); close(p2c[1]); close(c2p[0]); } return 0; }