进程间通信—命名管道

本文详细介绍了命名管道的概念及其工作原理。命名管道作为一种进程间通信方式,允许任意两个进程通过操作文件进行交互,不再局限于父子进程之间的通信。文章还讨论了命名管道的特性、读写操作的行为及如何使用mkfifo函数创建fifo文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命名管道,和匿名管道,有了自己的名字,有了名字就可以操作。所以他不在局限于有血缘关系的两个进程之间,适用于任意的两个进程。

实际上和匿名管道一样是一块内核中的缓存,和匿名管道不一样的是,他在文件系统中多了文件,而匿名管道的文件只存在与内存中,但是命名管道的文件虽然存在,有在内核数据结构中有自己的环境,但是在内核中的结点并没有存在数据块,数据的信息和缓存是同步的。

特性:

简单,在任意两个进程里想要通信的时候,只要使用操作文件的方式就可以(提前创建一个fifo文件)

读写操作:

还没有建立起来一个完整管道时,调用read会阻塞。

还没有建立起来一个完整管道时,调用write会阻塞。

建立起来后,关闭读端,写write,会有SIGPIPE信号。

建立起来后,关闭写端,读read,会返回0表示读完了。

完整的管道时,往已满的管道写会阻塞。

完整的管道时,读已空的管道时会阻塞。

创建fifo文件的函数:

int mkfifo(const char*pathname,mode_t mode);

指定路径和权限创建一个fifo文件,成功返回0,失败返回-1,并且设置erron。

使用文件的操作去使用fifo文件,实现通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值