#include #include #include #include #include #include #define MSG_STR "This message is from parent: Hello, child process!" int main(int argc, char **argv) { int pipe_fd[2]; int rv; int pid; char buf[512]; int wstatus; if( pipe(pipe_fd) < 0) { printf("Create pipe failure: %s\n", strerror(errno)); return -1; } if( (pid=fork()) < 0 ) { printf("Create child process failure: %s\n", strerror(errno)); return -2; } else if(pid == 0) { /* child process close write endpoint, then read data from parent process */ close(pipe_fd[1]); memset(buf, 0, sizeof(buf)); rv=read(pipe_fd[0], buf, sizeof(buf)); if(rv < 0 ) { printf("Child process read from pipe failure: %s\n", strerror(errno)); return -3; } printf("Child process read %d bytes data from pipe: \"%s\"\n", rv, buf); return 0; } /* parent process close read endpoint, then write data to child process */ close(pipe_fd[0]); if( write(pipe_fd[1], MSG_STR, strlen(MSG_STR)) < 0) { printf("Parent process write data to pipe failure: %s\n", strerror(errno)); return -3; } printf("Parent start wait child process exit...\n"); wait(&wstatus); return 0; }