Linux编程之pipe管道通信(2)

来源:互联网 发布:sql server修复工具 编辑:程序博客网 时间:2024/06/15 10:54

        上一篇我们介绍过创建管道的pipe函数,下面在代码中我们来实现进程间的通信吧。

        管道能在父、子进程间传递数据,利用的是fork调用之后两个管道文件描述符(fd[0],fd[1])都保持打开。一对这样的文件描述符只能保证父、子进程间一个方向的数据传输,父进程和子进程必须有一个关闭fd[0],另一个关闭fd[1]。比如,我们要使用管道实现从父进程向子进程写数据,可按照下图来操作:


        显然,如果要实现父、子进程之间的双向数据传输,就必须使用两个管道。

        pipe函数的表头文件#include <unistd.h>,函数定义 int pipe(int fd[2]);成功返回0,失败返回-1,并标记errno:EMFILE 进程已用完文件描述词最大量;ENFILE 系统已无文件描述词可用;EFAULT 参数 filedes 数组地址不合法。

        下面我们看一下代码示例:



   接下来我们编译连接,执行情况如下:



    不过,管道只用于有关联的两个进程(比如父、子进程)间的通信。不过有一种特殊的管道称为FIFO(先进先出),也叫命名管道,可用于无关联进程之间的通信,因为FIFO在网络编程中使用的不多,这里就不多介绍了。

  

原创粉丝点击