十二.Linux——管道

进程间通信(IPC):进程有独立的地址空间,不能直接访问对方内存,IPC 就是内核提供的、让多个进程交换数据 / 同步信号的机制。

Linux系统编程基础中,进程间通信包括:管道 信号量 共享内存 消息队列 套接字。

今天,我们学习其中之一的------管道。


管道:本质是内核中的一块环形缓冲区,用来在进程之间传递字节流。

分为:有名管道 无名管道

通信方式:半双工,例如对讲机,只能一边说话另一边听。

管道相对于普通文件:1.在内存读写速度快,2.自动完成同步(无数据就会堵塞)。

管道两端分为读端和写端,具有以下特点:

1.管道必须两个进程(读端,写端)同时打开,才能通,只有一个打开会堵塞;

2.管道写端被关闭,读端(n=read())返回值n等于0,结束进程;

3.管道读端被关闭,写端会触发异常,产生SIGPIPE信号,终止进程;

4.管道为空,读会堵塞 管道为满,写会堵塞。


我们一起看看代码是如何实现的吧:

一:有名管道

写端代码:./a

不断向管道文件中写入数据,直到输入end,退出。

读端代码:./b

不断读取管道文件中的数据(打印到屏幕上),直到读端关闭,返回值n为0,退出。

实现:同时打开读写进程

可以看到,实现了两个进程间的通信:当写端输入数据,读端就会输出相应数据,当输入end,读端结束,写端对应结束;

二:无名管道

代码:

在父子进程之间通信。

实现:

可以看到,实现了两个进程间的通信:当子进程输入一个内容,父进程会打印相应的内容。

有名管道和无名管道的区别:

有名管道可以在任意两个进程间通信

无名管道只能在父子进程之间通信


这就是管道的全部内容,感谢您的观看!!

相关推荐
BullSmall3 小时前
规则+大模型混合评测:高效精准双保障
运维·自动化
网硕互联的小客服9 小时前
Linux服务器磁盘应该如何合理分区?
linux·运维·服务器
楚识科技9 小时前
合同比对全流程自动化:OCR识别+差异比对+法律风险字段抽取实战指南
运维·自动化·ocr
代码方舟10 小时前
零信任架构实战:基于天远人企关联构建自动化供应链金融网关
运维·人工智能·架构·自动化
lisanmengmeng10 小时前
nacos nrpe 监控机及被监控机部署
服务器·nacos·nagios·nrpe
贵沫末10 小时前
Ubuntu——常用软件安装
linux·运维·ubuntu
Doraemomo11 小时前
Linux内核驱动开发——中断与定时器
linux·运维·驱动开发
2301_8084143811 小时前
Linux中动静态库的理解
linux·运维·服务器
分布式存储与RustFS12 小时前
模型 checkpoint 放对象存储:分片上传、断点续传与残留清理
运维·云原生·开源·对象存储·分布式存储·s3·性能基准