Linux系统编程 有名管道

第一时间关注Linux技术干货!

本文字数:2014字

阅读时间:6分钟

作者

良许

一个热爱技术的程序猿

1

(无名)管道的缺点

通过上一篇博文,我们知道,无名管道的一个最大的优点就是「简单」,但也有几个很重要的缺点:

只能应用于有血缘关系的进程间,比如父子进程,兄弟进程;

管道的缓冲区大小受限,通常为一页,4k大小;

所传送的是无格式字节流,需提前约定好数据格式。

2

有名管道概念

正是为了克服无名管道的那些缺点,才提出了有名管道这种IPC方式。有名管道提出了一个路径名与之相关联,以FIFO的形式存在于文件系统中的通信方式。通过这种机制,它实现了非血缘关系之间的进程可以通信。

管道建立以后,进程可以对其像文件一样进行操作,可以使用open,read,write,close函数,但不能使用lseek函数。

FIFO严格遵守先进先出(first in first out)原则,对管道的读总是从开始处返回数据,对管道的写总是把数据添加到末尾。

3

有名管道的读写操作

对于读进程:

如果进程以阻塞方式打开管道,即open函数未使用O_NONBLOCK标志,并且当前FIFO是空的,则读进程将一直阻塞,直到有数据写入;

如果进程以非阻塞方式打开管道,即open函数使用了O_NONBLOCK标志,则不管当前FIFO是否是空的,读进程将立即读取。

对于写进程:

如果进程以阻塞方式打开管道,即open函数未使用O_NONBLOCK标志,并且当前FIFO是满的,则写进程将一直阻塞,直到有数据被读走;

如果进程以非阻塞方式打开管道,即open函数使用了O_NONBLOCK标志,则不管当前FIFO是否是空的,写进程将立即执行写操作。如果写入失败将返回错误。

例程:

读进程:

写进程:

本公众号全部博文已整理成一个目录,请在公众号里回复「m」获取!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180716G1U3TN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券