#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> int main(void) { int n; int status; pid_t pid_1, pid_2; int fd[2]; char buffer[100] = "main function!"; if(pipe(fd) < 0) { perror("pipe failed!"); exit(1); } if((pid_1 = fork()) < 0) { perror("fork 1 failed!"); exit(1); } else if(pid_1 == 0) { strcpy(buffer, "info from process 1\n"); //printf("%d\n", strlen(buffer)); close(fd[0]); write(fd[1], buffer, strlen(buffer)); exit(0); } if((pid_2 = fork()) < 0) { perror("fork 2 failed!"); exit(1); } else if(pid_2 == 0) { close(fd[1]); n = read(fd[0], buffer, 100); printf("%s", buffer); exit(0); } waitpid(pid_1, &status, 0); waitpid(pid_2, &status, 0); printf("%s\n", buffer); return 0; }
父进程分出的两个子进程之间能够经过pipe管道通讯。父进程和子进程也能够经过pipe管道通讯。数组
可是要注意的是在父进程中定义的buffer数组在父进程分出子进程的时候会为两个子进程各自clone一份,因此在子进程中对buffer的操做不会影响父进程和另外子进程中的bufferspa