加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux进程间通信(二) 管道通信之无名管道及其基础实验

发布时间:2016-01-19 13:46:44 所属栏目:Linux 来源:网络整理
导读:管道简介 管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输 入(其实我更愿意将管道比喻为农村浇地的管子)。Linux的管道主要包
副标题[/!--empirenews.page--]

管道简介

管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输 入(其实我更愿意将管道比喻为农村浇地的管子)。Linux的管道主要包括两种:无名管道和有名管道。这一节 主要讲无名管道,首先介绍一下这两个管道。(特点很重要啊!)

1、无名管道

无名管道是 Linux中管道通信的一种原始方法,如图一(左)所示,它具有以下特点:

①  它只能用于具有亲 缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间);

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

③   管道也可以看成是一种特殊的文件,对于它的读写也可以使 用普通的 read()、write()等函数。但它不是普通的文件,并不属于其他任何文件系统并且只存在于内存中。

2、有名管道(FIFO)

有名管道是对无名管道的一种改进,如图1(右)所示,它具有以下特点:

①  它可以使互不相关的两个进程间实现彼此通信;

②  该管道可以通过路径名来 指出,并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当做普通文件一样进行读写操作 ,使用非常方便;

③  FIFO严格地遵循先进先出规则,对管道及FIFO的读总是从开始处返回数据 ,对它们的写则是把数据添加到末尾,它们不支持如 lseek()等文件定位操作。

Linux进程间通信(二) 管道通信之无名管道及其基础实验

无名管道及其系 统调用

1、管道创建与管道说明

管道是基于文件描述符的通信方式,当一个管道建立时,它会 创建两个文件描述符fd[0]和fd[1],其中fd[0]固定用于读管道,而fd[1]固定用于写管道,如图2所示,这样 就构成了一个半双工的通道。

Linux进程间通信(二) 管道通信之无名管道及其基础实验

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

2、管道创建函数

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

Linux进程间通信(二) 管道通信之无名管道及其基础实验

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读