进程之间的通讯之管道

无名管道

管道的整体(有名、无名)概念:我们通常把一个进程的输出通过一块内存连接到另外一个进程的输入。

特征:
1.半双工通讯方式,同一时刻数据只能单向流动。
2.类似于数据结构中的队列,遵循先进先出的原则。
3.管道中的数据具有一次性,一旦被读走,将被从管道中移除。
4.没有具体的文件名标识,所以只能在父子进程中通讯。
5.管道所传送的数据是无格式的,这要求管道的读出方与写入方必须事先约定好数据的格式,如多少字节算一个消息等

下面用图示解释它的创建以及使用:
这里写图片描述

有名管道

概念上面已经说过。
特征:1.有名管道有文件名作为标识符,所以可在任意两个进程之间进行通信
2.创建管道有两种形式:一 ,是在命令窗口使用mkfifo 管道名 二,是代码中调用系统函数mkfifio();之后的操作就把管道看作文件,使用文件操作就好打开: open 写数据:write 读数据:read 关闭:close
3.管道的各个接口会进行阻塞,例如:
如果一个进程以只写打开一个管道,而没有进程对这个管道进行读的权限打开,open就会阻塞到此处。知道有另一个进程以写的权限打开后,open才会执行下去。
read也会阻塞运行。如果其他进程没有给管道写入数据 ,read就会阻塞直至其他进程给管道内写入数据。如果当一个进程以写方式打开管道后,关闭了管道的写端,或者直接结束掉了进程,read不会阻塞,而是会直接返回0。
write虽然也会阻塞运行,但阻塞条件比较难达成,就是管道写满的情况。
管道的大小具体是多少。我们可以简单来测一下。
这里写图片描述

这里写图片描述
65536=64K;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值