☰
十二.Linux——管道
2026/9/30 5:38:12 网站建设 项目流程

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

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

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

———————————————————————————————————————————

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

分为:有名管道 无名管道

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

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

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

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

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

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

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

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

一:有名管道

写端代码:./a

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

读端代码:./b

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

实现:同时打开读写进程

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

二:无名管道

代码:

在父子进程之间通信。

实现:

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

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

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

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

———————————————————————————————————————————

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询