Linux中父子进程之间的通信

2016-11-30 20:52:27来源:cnblogs.com作者:Quiry人点击

    在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) //此处为了验证父子进程是否创建成功,如果未创建成功,则返回-126    {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    else37    {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;

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

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台