• Linux中父子进程之间的通信


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

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

  • 相关阅读:
    图灵5月书讯※特别制作【MongoDB将在5月中旬隆重上市】
    让你学会狂妄懂得谦卑的书
    一千个读者,一千个不同的编程人生
    松本行弘为什么开发Ruby
    在Flex控件中使用XMLListCollection
    32位系统部署到64位下常见问题及解决
    win7系统的IIS服务器如何解除上传200k限制
    Asp.net单点登录解决方案
    Web.Config加密【转】
    在IIS8添加WCF服务支持
  • 原文地址:https://www.cnblogs.com/zhy128/p/6118218.html
Copyright © 2020-2023  润新知