linux进程间通信之一:无名管道

Posted 刁海威

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux进程间通信之一:无名管道相关的知识,希望对你有一定的参考价值。

  无名管道是linux中管道通信的一种原始方法,有以下特征:

  1、单工通信模式,具有固定的读端和写端;

  2、管道可以看成是一种特殊的文件,对于它的读写可以使用普通的read(),write()等文件IO操作函数接口,但是它不属于任何文件系统,并且只存在与内存中;

  3、只能用于具有亲缘关系的进程之间的通信;

  4、通常使用时,首先创建一个管道,然后调用fork函数创建一个子进程,该子进程会继承父进程所创建的管道;

  5、只有在管道的读端存在时,向管道写入数据才有意义,否则向管道写入的数据的进程将收到内核发送过来的SIGPEPE信号;

  6、向管道写入数据时,linux不保证写入的原子性,管道缓冲区只要有空间,写进程就会试图向管道写入数据,如果管道缓冲区已满,那么写操作将会一直阻塞;

下面例子详尽阐述管道的使用方法,首先创建管道,然后父进程使用fork函数创建子进程,最后通过关闭父进程的读描述符和子进程的写描述符,建立它们之间的通信,父子进程的先后顺序通过信号量PV操作来实现;图1为详尽实现代码,图2为编译运行后结果。

 

以上是关于linux进程间通信之一:无名管道的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统编程进程间通信之无名管道

Linux进程间的通信方式

Linux进程间通信 --- 管道

Linux系统编程——进程间通信:命名管道(FIFO)

多进程编程之进程间通信-管道和消息队列

Linux编程--进程间通信