#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