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

  • 相关阅读:
    聪明人 & 普通人
    13种模型及方法论
    面向大规模商业系统的数据库设计和实践
    分治算法
    软件架构
    隐含前提思维模型
    Git回滚代码到某个commit
    使用arthas排查 test 问题
    Arthas
    docker 操作入门
  • 原文地址:https://www.cnblogs.com/rocklee25/p/6680050.html
Copyright © 2011-2022 走看看