Linux~~~~pipe 和 fifo

①,创建一个名叫exam.fifo的命名管道,等②③中输入cat命令后,再在①通过echo往管道中输入数据

②,在管道中没有数据的时候,处于阻塞挂起状态,等管道中有数据的时候,立马显示,

③,在管道中没有数据的时候,处于阻塞挂起状态,等管道中有数据的时候,立马显示,

我在做测试的时候,②中cat命令要早于③的,从结果上看,

实际只能一个进程得到管道的数据,而且与命令的启动时间没有太大关系

②和③各有一次得到了管道中的数据

 

在linux进程间通信(IPC)可以通过信号量、文件系统、消息队列、共享内存还有管道来实现的。

其中消息队列、内存管理是在System V中提出的。
进程通信间涉及到了管道,而且管道在shell命令中也大有用处。那就简要说说管道:


管道顾名思义,你可以将其理解为日常生活中的管子,一边流入,一边流出。它可以有半双工和全双工。

半双工就是只能一边流入,另一边流出;全双工则是一边可以流入,也可以流出。

pipe就是一种半双工的管道。形如: ls | grep .*START

其中,fd[1] 用来向管道中写入数据,而fd[0]在另一端用来读出数据。

如果现有两个进程要利用pipe进行通信。此时,就要保证只能有一个写入端和一个读出端,即:fd[1]和fd[0]只能有一个。

不属于任何文件系统,只存在于内存中,它是无名无形的,

 

fifo是一种全双工,即:它的一端既可以进行读取fd[0],也可以进行写入fd[1]。

有名有形的,LINUX中设立了一个专门的特殊文件系统--管道文件,它存在于文件系统中,

任何进程可以在任何时候通过有名管道的路径和文件名来访问管道。

但是在磁盘上的只是一个节点,而文件的数据则只存在于内存缓冲页面中,与普通管道一样。


正因为它的这种通信方式,使其可以用来涉及基于C/S模式的网络通信。具体做法:
首先让服务器产生一个服务器端的FIFO,然后让各个客户端产生以其PID为名称的客户端的FIFO,

在客户于服务器进行通信时,客户端向服务器端发送自己的PID,以使服务器对客户的请求进行响应时,向其客户端的FIFO写入响应信息。

代码实现客户端和服务器进行各自的名称和PID交换。

 

FIFO相对PIPE有一个优势,

就是FIFO只要求两个进程是同一主机的,而不要求进程之间存在亲缘关系。

FIFO是存在于文件系统的文件,可以使用诸如open、read、write等函数来操作。

FIFO是一种进程通信机制,它突破通常管道无法进行无关进程之间的通信的限制,使得同一主机内的所有的进程都可以通信。

FIFO又叫命令管道,是一个文件类型。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值