【操作系统】pipe&mkfifo|管道详解

 🔥 博客主页: 我要成为C++领域大神
🎥系列专栏【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】
❤️感谢大家点赞👍收藏⭐评论✍️

本博客致力于分享知识,欢迎大家共同学习和交流。

管道实现的原理

进程的0~3G用户空间是独占内存,此内存数据不允许多进程共享。而3~4G的内核层PCB控制块在进程之间是共享的。所以要想实现进程间的通信,需要利用进程之间共享的内核层来传输数据。

匿名管道

在接触匿名管道之前,我们需要先了解一下pipe函数

pipe函数

pipe() 函数用于创建一个匿名管道。允许一个进程将数据写入管道,另一个进程从管道读取数据。

函数原型

#include <unistd.h>

int pipe(int fds[2]);

参数

fds:这是一个包含两个整数的数组,用于存储管道的文件描述符。

fds[0]:读端,进程从这个文件描述符读取数据。

fds[1]:写端,进程向这个文件描述符写入数据。

返回值

成功时返回 0

失败时返回 -1 并设置 errno 以指示错误类型。

工作原理

pipe() 在内核中创建一个管道,这个管道由一个内存缓冲区和两个文件描述符(读端和写端)组成。

fds[0] 用于从管道读取数据,fds[1] 用于向管道写入数据。

数据通过管道从写端流向读端,实现进程间的单向通信。

了解了pipe函数之后,我们知道,pipe实现的原理是两个进程共用读写的文件描述符。而什么样的进程共用文件描述符呢?
答:调用 fork() 创建一个子进程。子进程会继承父进程的文件描述符,包括管道的文件描述符。

pipe()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值