进程间的通信之管道(匿名管道)

文章详细介绍了进程间通信的管道机制,包括管道的特点、匿名管道的使用、读写操作的阻塞与非阻塞行为。管道是一种允许父子进程或兄弟进程间通信的机制,读取时如果没有数据会阻塞,写入时如果管道已满也会阻塞。此外,还提到了如何设置管道为非阻塞模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程间通信(IPC)

inter process conmmunication
在这里插入图片描述
👇👇👇*&*:
在这里插入图片描述
上边除了共享内存还可以使用内存映射。

管道

管道特点

在这里插入图片描述在这里插入图片描述

为什么可以使用管道进行进程间通信

在使用fork创建进程后,文件描述符被复制,有两个相同的文件描述符同时指向管道。
在这里插入图片描述

管道数据结构

在这里插入图片描述

匿名管道的使用

在这里插入图片描述
在这里插入图片描述
注意: 匿名管道只能用于具有关系的进程之间的通信(父子,兄弟,孙子进程)。
使用读函数读取的时候管道没有资源会进入阻塞态。
获取管道大小
可以通过ulimit -a
也可以通过long size = fpathconf(fd, _PC_PIPE_BUF),返回值就是其大小.

匿名管道情况:
在这里插入图片描述

管道实例

在这里插入图片描述
dup2文件描述符的重定向

管道读写特点

阻塞IO操作

读管道:
当管道中有数据,读取时返回实际读取的字节数。
当管道中没有数据:
如果有写端,则阻塞等待数据;
如果没有写端,则返回0。

写管道:
若没有读端,进程异常终止(进程收到SIGPIPE信号)
当有读端时:
当管道满了,则写时进入阻塞等待有空间再写;
管道没有满,write写入数据,并返回实际写入的字节数。

对于非阻塞的操作:
非阻塞输入时,阻塞状态的情况会返回-1.

管道设置非阻塞

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猛笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值