Linux匿名管道

目录

1.原理

1.直接原理

2.本质原理

2.管道接口

3.管道中的四种情况

1.读写端正常,管道如果为空,读端就要堵塞

2.读写端正常,管道如果被写满,写端就要堵塞

3.读端正常,写端关闭,读端就会读到0,表明读到文件(pipe)结尾,不会被堵塞

4.写端正常,读端关闭,操作系统就要杀掉正在写入的进程。(通过信号杀掉)

4.匿名管道特性

5.运用的场景模拟代码


1.原理

1.直接原理

由于进程具有独立性,要两个进程进行通信是要代价的,所以其本质是让不同的进程看到同一份资源!管道也可以看成文件!

2.本质原理

我们假设让父进程进行读取,子进程进行写入:

记住改文件没有inode文件属性和文件名字,因为该文件不需要其他人进行访问,知道其文件描述符(文件数组下标)就可以了。

2.管道接口

有些人好奇,一般不都是int pipefd\[\]这样子的形参吗?但这边是特意告诉我们这里的数组只需要传两个大小int的数组,piprfd0表示读下标,pipefd1表示写下标(这其实很好记住,0是嘴巴o--读,1是笔--写):

由此可知:所以只有具有血缘关系的进程才能通过匿名管道进行通信!

3.管道中的四种情况

1.读写端正常,管道如果为空,读端就要堵塞

上面就是这个情况,写端中有sleep1,读端就自动在堵塞等待。

2.读写端正常,管道如果被写满,写端就要堵塞

但是到底管道到底有多大呢?

这边显示4KB,但是我们试验一下呢?

一个实验是64KB, 但是ulimit -a 中显示的是4kb,其实pipe函数说明中有一个PIPE_BUF

man 7 pipe:

所以我们就把它当成PIPE_BUF就好了,那这个是什么呢?就是比如写端在写hello world,但写到hello后读端开始读了,可能只读了hello,因此只要写端没超过4kb,还在写的过程中,读端是不会读的!

3.读端正常,写端关闭,读端就会读到0,表明读到文件(pipe)结尾,不会被堵塞

4.写端正常,读端关闭,操作系统就要杀掉正在写入的进程。(通过信号杀掉)

sign pipe

4.匿名管道特性

1.具有血缘关系的进程进行进程间通信。

2.管道只能单向通信

3.父子进程是会进程协同的,同步与互斥--保护管道文件的数据安全

4.管道是面向字节流的

5.管道是基于文件的,而文件的生命周期是随进程的!

5.运用的场景模拟代码

相关推荐
佳児素花痴╮4 小时前
服务器模型、网络调试工具、网络协议头分析
服务器·网络·网络协议
左手厨刀右手茼蒿6 小时前
数据仓库的架构演进:从MySQL到ClickHouse到数据湖的工程化实践
linux·嵌入式·系统内核
左手厨刀右手茼蒿6 小时前
创业团队技术选型:别用大厂架构解决小团队问题
linux·嵌入式·系统内核
明志数科7 小时前
宇树科技IPO背后的产业逻辑:人形机器人从“讲故事“到“交数据“
运维·服务器·数据库
外滩运维专家7 小时前
验证码接口上线三天就被刷了,我后来加的几道防线
运维
Data_Journal7 小时前
什么是 CAPTCHA,它是如何工作的?
java·大数据·服务器·前端·数据库
跨境小彭7 小时前
店群运营实操复盘:批量活动申报自动化优化方案
大数据·运维·人工智能·自动化·跨境电商·temu·temu电商运营
Jlzn88887 小时前
2026年锂电CCS组装线:车规储能双场景兼容自动化方案的技术架构与实践
运维·架构·自动化
bosins7 小时前
将 Hyper-V 上的 Ubuntu 虚拟机内容迁移到 WSL (Windows Subsystem for Linux) 中
linux·windows·ubuntu
AC赳赳老秦7 小时前
语义采集进阶实战:利用 OpenClaw AI 语义识别自动提取网页核心信息,无需手动编写选择器
java·运维·服务器·python·信息可视化·deepseek·openclaw