找回密码
 注册
关于网站域名变更的通知
查看: 203|回复: 1
打印 上一主题 下一主题

Linux进程间通信(2)学习一下管道通信之无名管道和他的基础实验

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-24 10:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
管道简介" j$ l& i; l, ~  L' z' C
- y$ k3 g6 P8 ^; h3 n6 Z
   管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入(其实我更愿意将管道比喻为农村浇地的管子)。Linux的管道主要包括两种:无名管道和有名管道。这一节主要讲无名管道,首先介绍一下这两个管道。(特点很重要啊!)
  \+ Y) h2 x6 g6 c$ O: j- ]( v$ r+ Q
# m& z# y& c" v  P8 ^0 t3 H1、无名管道3 {8 q- D% z5 c! E

$ |: H) `% h2 g% O   无名管道是Linux中管道通信的一种原始方法,如图一(左)所示,它具有以下特点:
0 ^) D3 D$ S/ ~" Y+ A
! r9 j9 X" w& o2 J! ~, O# q4 M* U8 `   ①  它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间);
1 p/ V5 G5 M9 y9 [
  p3 l- {# o% m1 u5 H   ②  它是一个半双工的通信模式,具有固定的读端和写端;
5 T0 f0 P; {4 F8 o5 s$ [
( l3 v3 o+ ?% Q4 ?3 A   ③   管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的 read()、write()等函数。但它不是普通的文件,并不属于其他任何文件系统并且只存在于内存中。
/ t9 y$ _0 g4 r$ l% j6 m/ C  N: Y" ]- U" Y* {; x
2、有名管道(FIFO)/ o$ |: u4 y2 w3 @, h6 k
2 l# X1 v5 n, {! S
    有名管道是对无名管道的一种改进,如图1(右)所示,它具有以下特点:' v$ q9 N# _- u. G$ h& h
) s. Q& z2 g4 I& r
    ①  它可以使互不相关的两个进程间实现彼此通信;
1 i+ Y2 h" n$ ^/ X) C- c+ m+ l  a7 R- Z- T3 j6 [9 r
    ②  该管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当做普通文件一样进行读写操作,使用非常方便;$ ]* q: u4 e* F; f% y

. {1 I8 u+ k5 l' E- a+ Q& ]    ③  FIFO严格地遵循先进先出规则,对管道及FIFO的读总是从开始处返回数据,对它们的写则是把数据添加到末尾,它们不支持如 lseek()等文件定位操作。+ p9 h* D& k2 P* p/ m* U; T4 f

  k9 k% |7 S% j   
3 [- ?0 j/ W( O) C: I

: n% `7 c/ I# G6 l8 [& X1 o无名管道及其系统调用
7 s# q" O  H+ O2 t& j. U' `
- [" D/ c% l/ _% x, U1、管道创建与管道说明
$ a9 X6 [$ K# i& A
# j7 O7 i! u; q% m2 p  P/ Z
    管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个文件描述符fd[0]和fd[1],其中fd[0]固定用于读管道,而fd[1]固定用于写管道,如图2所示,这样就构成了一个半双工的通道。6 a$ `1 ~) y2 m% [5 ^1 L* P. l
9 j2 d% |5 H9 s, a& I
游客,如果您要查看本帖隐藏内容请回复
- ^' I$ R5 q) \  H& Q5 O) y5 u

, V9 ]. @4 X# M/ o6 w" m2 E1 d8 E; ^. G* O6 j
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 00:27 , Processed in 0.156250 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表