编程技术分享平台

网站首页 > 技术教程 正文

跟我学编程19:管道-进程间效率最差的一种通信方式

xnh888 2025-05-28 21:15:27 技术教程 6 ℃ 0 评论



管道本质上就是内核中的一个缓存,当进程创建一个管道后,Linux会返回两个文件描述符,一个是写入端的描述符,一个是输出端的描述符,可以通过这两个描述符往管道写入或者读取数据。

匿名管道

特点:

它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。

它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。

它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。

但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

缺点:

半双工通信,一条管道只能一个进程写,一个进程读。

一个进程写完后,另一个进程才能读,反之同理。


单个进程中的管道几乎没有任何用处。所以,通常调用 pipe 的进程接着调用 fork,这样就创建了父进程与子进程之间的 IPC 通道。

若要数据流从父进程流向子进程,则关闭父进程的读端(fd[0])与子进程的写端(fd[1]);反之,则可以使数据流从子进程流向父进程。



父子进程的通信应用:

在Linux系统中操作时,你一定会用到管道。
管道可以用来在两个进程之间传递数据,比如:

ps -ef | grep “bash”

其中‘|’就是管道,其作用就是将 ps 命令的结果写入管道文件,然后 grep 再从管道文件中读出该数据进行过滤。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表