/*-------------------------------------------------------------------*/ /* testpipeforkexec.c */ /* The pipe system call with fork and exec. */ /*-------------------------------------------------------------------*/ /* Error handling code omitted. */ /*-------------------------------------------------------------------*/ #include #include #define BUFFER_LENGTH 256 int main(int argc, char *argv[]) { int iPid; int piPipeFd[2]; int iOldFd0; char pcBuffer[BUFFER_LENGTH]; pipe(piPipeFd); iPid = fork(); if (iPid == 0) { char *ppcArgv[2]; ppcArgv[0] = "date"; ppcArgv[1] = NULL; close(piPipeFd[0]); close(1); dup(piPipeFd[1]); close(piPipeFd[1]); execvp("date", ppcArgv); perror(argv[0]); _exit(1); } close(piPipeFd[1]); iOldFd0 = dup(0); close(0); dup(piPipeFd[0]); close(piPipeFd[0]); fgets(pcBuffer, BUFFER_LENGTH, stdin); close(0); dup(iOldFd0); close(iOldFd0); printf("%s", pcBuffer); return 0; } /* Sample execution: --> gcc -Wall -ansi -pedantic -o testpipeforkexec testpipeforkexec.c --> testpipeforkexec Mon Oct 21 22:30:47 EDT 2002 --> */