×

进程间通信之:管道

消耗积分:1 | 格式:rar | 大小:0.4 MB | 2017-10-18

分享资料个

 8.2.1 管道概述
  本书在第2章中介绍“ps”的命令时提到过管道,当时指出了管道是Linux中一种很重要的通信方式,它是把一个程序的输出直接连接到另一个程序的输入,这里仍以第2章中的“ps –ef | grep ntp”为例,描述管道的通信过程,如图8.2所示。
  进程间通信之:管道
  图8.2 管道的通信过程
  管道是Linux中进程间通信的一种方式。这里所说的管道主要指无名管道,它具有如下特点。
  n 它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间)。
  n 它是一个半双工的通信模式,具有固定的读端和写端。
  n 管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的read()和write()等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内核的内存空间中。
  8.2.2 管道系统调用
  1.管道创建与关闭说明
  管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个文件描述符fds[0]和fds[1],其中fds[0]固定用于读管道,而fd[1]固定用于写管道,如图8.3所示,这样就构成了一个半双工的通道。
  进程间通信之:管道
  图8.3 Linux中管道与文件描述符的关系
  管道关闭时只需将这两个文件描述符关闭即可,可使用普通的close()函数逐个关闭各个文件描述符。
  注意当一个管道共享多对文件描述符时,若将其中的一对读写文件描述符都删除,则该管道就失效。
  2.管道创建函数
  创建管道可以通过调用pipe()来实现,表8.1列出了pipe()函数的语法要点。
  表8.1 pipe()函数语法要点
  所需头文件#include 《unistd.h》
  函数原型int pipe(int fd[2])
  函数传入值fd[2]:管道的两个文件描述符,之后就可以直接操作这两个文件描述符
  函数返回值成功:0
  出错:-1
 

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !