zoukankan      html  css  js  c++  java
  • Linux进程间管道通信,两个子进程间的通信

    #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
    ");
            //printf("%d
    ", 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
    ", buffer);
        
        return 0;
    }

    父进程分出的两个子进程之间可以通过pipe管道通信。父进程和子进程也可以通过pipe管道通信。

    但是要注意的是在父进程中定义的buffer数组在父进程分出子进程的时候会为两个子进程各自clone一份,所以在子进程中对buffer的操作不会影响父进程和另外子进程中的buffer

  • 相关阅读:
    Python爬虫3大解析库使用导航
    pyquery解析库的介绍和使用
    BeautifulSoup解析库的介绍和使用
    Xpath解析库的使用
    python爬虫之正则表达式(用在其他地方也可)
    requests的基本使用
    Linux下防范小型cc攻击
    图片素材资源
    postman安装
    edraw快捷键
  • 原文地址:https://www.cnblogs.com/rocklee25/p/6680050.html
Copyright © 2011-2022 走看看