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

  • 相关阅读:
    SVN 使用锁实现独占式签出
    浏览器console中加入jquery方便调试
    nuget安装说明
    sql server 索引优化
    Windwos Server 2016 远程桌面授权
    tomcat的安装与配置
    业务监控
    敏捷话管理团队
    一键搞定多服务器的更新
    迁移历史sql数据
  • 原文地址:https://www.cnblogs.com/rocklee25/p/6680050.html
Copyright © 2011-2022 走看看