Add IPC pipe() sample code
New file |
| | |
| | | #include <stdio.h> |
| | | #include <string.h> |
| | | #include <unistd.h> |
| | | #include <errno.h> |
| | | #include <sys/types.h> |
| | | #include <sys/wait.h> |
| | | |
| | | #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; |
| | | } |
| | | |