对OS实验中的“管道”的一点儿理解

本文详细介绍了管道通信机制,包括无名管道和有名管道的区别,以及如何在Linux中使用pipe和mkfifo命令。强调了管道的半双工特性以及读写端的关闭规则,并通过举例说明了匿名管道在父子进程间通信的应用。还讨论了管道的局限性,如容量限制和数据无格式化。最后,探讨了LINUX管道的实现机制,包括固定缓冲区的大小及其带来的阻塞问题。
摘要由CSDN通过智能技术生成

管道通信机制
管道 pipe 是进程间通信最基本的一种机制。在内存中建立的管道称为无名管道,
在磁盘上建立的管道称为有名管道。无名管道随着进程的撤消而消失,有名管道则可
以长久保存,shell 命令符| 建立的就是无名管道,而 shell 命令 mkfifo 建立的是有名
管道。两个进程可以通过管道一个在管道一端向管道发送其输出,给另一进程可以在
管道的另一端从管道得到其输入.管道以半双工方式工作,即它的数据流是单方向的.
因此使用一个管道一般的规则是读管道数据的进程关闭管道写入端,而写管道进程关
闭其读出端
。管道既可以采用同步方式工作也可以采用异步方式工作。

对“读管道数据的进程关闭管道写入端,而写管道进程关闭其读出端”的理解:
用反证法的思想,假如写管道的进程关闭管道写入端,那么,读管道进程已经不想读管道了,写管道进程还在源源不断地写入数据,那么管道是不是就会太慢而导致“炸裂”?,所以是读管道进程关闭管道的写入端。而写管道的进程关闭读出端,也很好理解,写管道的进程不想写了,它就关闭读出端,读管道进程读完管道中剩余的数据后自然也读不到数据了。
上面这句话的意思是,读管道数据的进程在读数据之前要关闭管道写入端,写管道进程在写数据之前关闭其读出端,在读管道数据的进程读完数据之后,关闭管道的读出端(0端),写管道进程在写完数据之后关闭其写入端(1端)。

匿名管道的局限性主要有两点:一是由于管道建立在内存中,所以它的容量不可能很大;二是管道所传送的是无格式字节流,这就要求使用管道的双方实现必须对传输的数据格式进行约定。

例子:在父子进程之间利

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值