Linux匿名管道:进程通信深度解析。

Linux进程通信:匿名管道详解

匿名管道(Anonymous Pipe)是Linux中一种经典的进程间通信(IPC)机制,主要用于具有亲缘关系的进程间数据传输。其本质是由内核管理的单向数据流,遵循先进先出(FIFO)原则,仅支持单向通信。

匿名管道的核心特性

匿名管道通过系统调用pipe()创建,返回两个文件描述符:fd[0]用于读取,fd[1]用于写入。数据从写入端流向读取端,默认大小为64KB(可通过fcntl()调整)。

典型应用场景包括父子进程通信或兄弟进程协同。由于没有持久化标识,匿名管道仅适用于存在共同祖先的进程。

匿名管道的创建与使用

以下代码展示父子进程通过匿名管道通信的完整流程:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    int pipefd[2];
    char buffer[1024];
    
    if (pipe(pipefd) == -1) {
        perror("pipe creation failed");
        exit(EXIT_FAILURE);
    }

    pid_t pid = fork();
    if (pid == -1) {
        perror("fork failed");
        exit(EXIT_FAILURE);
    }

    if (pid == 0) {  // 子进程
        close(pipefd[1]);  // 关闭写端
        ssize_t count = read(pipefd[0], buffer, sizeof(buffer));
        if (count == -1) {
            perror("read failed");
            exit(EXIT_FAILURE);
        }
        printf("Child received: %.*s\n", (int)count, buffer);
        close(pipefd[0]);
    } else {  // 父进程
        close(pipefd[0]);  // 关闭读端
        const char* msg = "Hello from parent";
        write(pipefd[1],
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值