c++ 进程间通信---管道

进程间通信(IPC, Inter-Process Communication)

是指在操作系统中,不同进程之间进行数据交换和信息共享的技术。管道(Pipe)是其中一种简单且常用的IPC机制,特别适用于具有亲缘关系的进程(通常是父进程和子进程之间)之间的数据传输。管道分为两种类型:无名管道(匿名管道)和命名管道(FIFO,First In First Out)。

管道简单来说就是:是一系列将标准输入输出链接起来的进程,其中每一个进程的输出被直接作为下一个进程的输入。下面通过例子介绍下匿名管道。

1.示意图

无名管道是一种半双工通信方式,即数据只能单向流动,而且只能在具有共同祖先的进程间使用。当一个进程创建管道并fork出子进程后,父子进程就可以通过这个管道进行通信。

2.特点

  1. 管道传输数据是单向的

  2. 如果想相互通信,我们需要创建两个管道才行

3.示例:

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main() {
    int fd[2]; // 文件描述符数组,fd[0]用于读,fd[1]用于写
    char write_msg[] = "Hello from parent process!\n";
    char read_msg[80];

    // 创建管道
    if (pipe(fd) == -1) {
        perror("Pipe creation failed");
        return 1;
    }

    // 创建子进程
    pid_t pid = fork();

    if (pid < 0) { // fork失败
        perror("Fork failed");
        return 1;
    } else if (pid > 0) { // 父进程
        // 关闭不需要的管道读端
        close(fd[0]);

        // 通过管道写端写入消息
        write(fd[1], write_msg, strlen(write_msg) + 1);

        // 关闭管道写端
        close(fd[1]);
        printf("Parent process wrote message.\n");
    } else { // 子进程
        // 关闭不需要的管道写端
        close(fd[1]);

        // 从管道读端读取消息
        read(fd[0], read_msg, sizeof(read_msg));
        printf("Child process received: %s", read_msg);

        // 关闭管道读端
        close(fd[0]);
    }

    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值