在Linux系统中实现父子进程的通信可以采用pipe()和fork()函数进行实现。利用两个管道在父子进程之间进行通信如:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<sys/types.h> 4 #include<unistd.h> 5 #include<string.h> 6 int main(void){ 7 pid_t pid; 8 int i=0; 9 int result = -1; 10 int fd[2],nbytes; 11 char string[] = "你好,管道";//对string数组初始化 12 char readbuffer[80]; 13 int *write_fd = &fd[1]; 14 int *read_fd = &fd[0]; 15 printf("Please input data:"); 16 scanf("%s",string); 17 result = pipe(fd); 18 if(-1 == result) 19 { 20 printf("建立管道失败!\n"); 21 return -1; 22 } 23 24 pid=fork(); 25 if(-1 == pid) //此处为了验证父子进程是否创建成功,如果未创建成功,则返回-1 26 { 27 printf("进程创建失败!\n"); 28 return -1; 29 } 30 else if(0 == pid) 31 { 32 close(*read_fd); 33 result = write(*write_fd,string,strlen(string)); 34 return 0; 35 } 36 else 37 { 38 close(*write_fd); 39 nbytes = read(*read_fd,readbuffer,sizeof(readbuffer)-1); 40 printf("接收了%d个数据,内容为:\"%s\"\n",nbytes,readbuffer); 41 } 42 return 0; 43 }
对于父子进程,在程序运行时首先进入的是父进程,其次是子进程,在此我个人认为,在创建父子进程的时候程序是先运行创建的程序,其次在复制父进程创建子进程。
fork()函数主要是以父进程为蓝本复制一个进程,其ID号和父进程的ID号不同。对于结果fork出来的子进程的父进程ID号是执行fork()函数的进程的ID号;
例如:
父进程, fork返回值是:17025 ID:17024 ,父进程ID:16879
子进程, fork返回值是:0, ID:17025 ,父进程ID:17024
pipe()函数是创建管道函数,在管道创建成功时,函数返回值是0;在管道创建失败是,函数返回值是-1;
(有什么错误希望各位指出,本人定会改正,谢谢各位的阅读)