/*-------------------------------------------------------------------*/ /* testpipedup.c */ /* The pipe and dup system calls. */ /*-------------------------------------------------------------------*/ #include #include int main(int argc, char *argv[]) { int piPipeFd[2]; int iProducerPid; int iConsumerPid; int iPipeStatus; iPipeStatus = pipe(piPipeFd); iProducerPid = fork(); /* Fork a producer */ if (iProducerPid == 0) { /* Producer */ char pcBuffer[] = "somedata"; close(piPipeFd[0]); close(1); dup(piPipeFd[1]); close(piPipeFd[1]); printf("%s", pcBuffer); fflush(stdout); _exit(0); } iConsumerPid = fork(); /* Fork a consumer. */ if (iConsumerPid == 0) { /* Consumer */ char pcBuffer[9]; close(piPipeFd[1]); close(0); dup(piPipeFd[0]); close(piPipeFd[0]); scanf("%s", pcBuffer); printf("Consumed %s.\n", pcBuffer); fflush(stdout); _exit(0); } close(piPipeFd[0]); close(piPipeFd[1]); return 0; } /* Sample execution: $ testpipedup Consumed somedata. $ */