关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

进程间通信——有名管道原理及详解(附有案例代码)

发布时间:2023-06-26 22:00:28

1、定义


  有名管道(FIFO)不同于匿名管道之处在于它提供了一个路径名与之关联,以 FIFO的文件形式(特殊文件形式)存在于文件系统中,并且其打开方式与打开一个普通文件是一样的,这样即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径就能够彼此通过 FIFO相互通信,因此,通过FIFO不相关的进程也能交换数据。


      一旦打开了 FIFO,就能在它上面使用与操作匿名管道和其他文件的系统调用一样的I/O系统调用了 (如read ( ). write()和close())。与管道一样, FIFO也有一个写入端和读取端,并且从管道中读取数据的顺序与写入的顺序是一样的。FIFO 的名称也由此而来:先入先出。


2、有名管道与匿名管道的区别


1. FIFO在文件系统中作为一个特殊文件存在,但FIFO中的内容却存放在内存中。

2.当使用FIFO 的进程退出后,FIFO文件将继续保存在文件系统中以便以后使用。

3. FIFO 有名字,不相关的进程可以通过打开有名管道进行通信(无亲属关系也可)。


3、有名管道的使用


因涉及一些执行语句,禁止写入,请联系客服获取


4、有名管道通信案例


因涉及一些执行语句,禁止写入,请联系客服获取


因涉及一些执行语句,禁止写入,请联系客服获取

说明:只有读端和写段都被打开时才能正常通信;在两个终端(两个进程分别运行两个函数); 


5、注意事项


    读管道:


       管道中有数据,read返回实际读到的字节数


       管道中无数据:


           管道写端被全部关闭,read返回0,(相当于读到文件末尾)


           写端没有全部被关闭,read阻塞等待


   写管道:


       管道读端被全部关闭,进行异常终止(收到一个SIGPIPE信号)


       管道读端没有全部关闭:


           管道已经满了,write会阻塞


           管道没有满,write将数据写入,并返回实际写入的字节数。


6、有名管道案例



(1) 进程A:

因涉及一些执行语句,禁止写入,请联系客服获取


(2) 进程B:

因涉及一些执行语句,禁止写入,请联系客服获取

说明:只有读端和写段都被打开时才能正常通信;在两个终端(两个进程分别运行两个函数);


/template/Home/leiyu/PC/Static