Linux中父子进程之间的通信

2018-06-18 04:12:31来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

    在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;

     (有什么错误希望各位指出,本人定会改正,谢谢各位的阅读)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:二级c程序设计题(1)

下一篇:PAT/简单模拟习题集(二)