十二.Linux——管道

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

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

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


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

分为:有名管道 无名管道

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

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

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

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

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

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

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


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

一:有名管道

写端代码:./a

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

读端代码:./b

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

实现:同时打开读写进程

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

二:无名管道

代码:

在父子进程之间通信。

实现:

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

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

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

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


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

相关推荐
Decay__2 小时前
SQL Server 数据库全栈运维实战系列 — 合集索引(24 篇)
运维·数据库·sql·mysql·架构
Decay__10 小时前
12_MySQL InnoDB 内存与锁调优 —— Buffer Pool、redo log、隔离级别与锁等待
运维·数据库·sql·mysql·架构
java_logo12 小时前
Docker 部署 Dify:轻松搭建 LLM 应用开发平台
运维·docker·容器
方便面不加香菜13 小时前
Docker Container -- 综合实战案例详解
运维·docker·容器
LongRunning14 小时前
【Linux】RK3568-OpenCV+YOLO(八)
linux·opencv·yolo
海洋之恒15 小时前
GitHub Actions 自动化:5 个真实运维提效案例
运维·自动化·github
迪康coolmu16 小时前
出差终端数据安全落地实战:基于迪康端点安全一体化管理系统的四道防线实践
运维·服务器·经验分享·笔记·其他·安全·php
民乐团扒谱机17 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
물の韜18 小时前
ZYNQ/FMQL系列Linux之I2C开发实战
linux·arm开发·嵌入式硬件·设备树·iic·zynq