十二.Linux——管道

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

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

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


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

分为:有名管道 无名管道

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

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

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

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

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

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

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


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

一:有名管道

写端代码:./a

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

读端代码:./b

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

实现:同时打开读写进程

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

二:无名管道

代码:

在父子进程之间通信。

实现:

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

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

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

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


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

相关推荐
非凡ghost1 小时前
视频剪辑不用等渲染,这款开源工具让切分合并秒级完成
运维·电脑·软件需求
FII工业富联科技服务3 小时前
Omniverse 数字孪生与柔性自动化,如何破解产能与交付、设备与空间的双重困境?
运维·自动化·devops
润滑卫士3 小时前
油液介电常数在线监测:测量原理与油液老化状态评估方法
运维
Rock Chin6974 小时前
把 n8n 接进 Slack:在对话里 @机器人 触发自动化工作流
运维·机器人·自动化
浩浩测试一下5 小时前
Linux 底层知识点 1
linux·运维·服务器
Eloudy5 小时前
全文 - IMEX 第01节 -IMEX overview
运维·服务器·网络
物联网软硬件开发-轨物科技6 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
Escalating_xu6 小时前
【Linux 网络编程】TCP 跨平台实战:用 Windows 客户端访问 Linux 服务器
linux·服务器·网络
发量惊人的中年网工6 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
海宇数据6 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化