进程间通信之管道

来源:互联网 发布:hk域名 编辑:程序博客网 时间:2024/05/22 17:20

一:管道

1.无名管道特点: 

(1)只能用于有关系的进程通信(父子进程或者兄弟进程)

(2)它是一个半双工的通信模式,具有固定的读端和写断;

(3)它是一个特殊文件,不属于其他任何文件系统,并且只存在于内存;

2.有名管道特点:

(1)可以使互不相关的俩个进程之间实现彼此的通信;

(2)可以通过路径指出,并且在文件系统中为可见的;

(3)严格的遵循先进先出的原则,不支持lseek()一样的文件定位操作;

二:无名管道及系统调用

1.管道的创建 

管道是基于文件描述符的通信方式,当一个管道建立时,它会创建俩个文件描述符fd[0],fd[1].0管道用于读,1管道用于写;

       管道关闭时只需要将这两个文件描述符关闭即可,可使用普通的close()函数逐个关闭各个文件描述符。

2、管道创建函数

   创建管道可以调用 pipe() 来实现,如下表

  

3、管道读写说明

实际上,通常先是创建一个管道,再调用fork()函数创建一个子进程,该子进程会继承父进程所创建的管道,这时,父子进程管道的文件描述符对应关系如下图

      

代码如下: