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

Linux进程间通信(3)这篇讲的是管道通信之有名管道和他的基础实验

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
有名管道(FIFO)4 C# Y9 j- X5 S0 |# e! b8 F5 w- h" V  R& {

: Y1 E; t  O2 a' {( f2 b4 a   首先将上一节的有关有名管道的定义再贴出来" s! Z! O. c% T
  K& S: K4 g/ v" @' z
    有名管道是对无名管道的一种改进,它具有以下特点:4 h8 P7 a1 a( B  E
9 E0 R! T4 A% ?& G& M# S  Q$ Z  e5 ?
    ①  它可以使互不相关的两个进程间实现彼此通信;
6 P4 C& l5 h- m( G* a
# _/ P; ?; `' b$ w8 @8 S    ②  该管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当做普通文件一样进行读写操作,使用非常方便;
5 ~% e' I" G& X4 N0 E3 O# ]2 e' s
5 ~! E; H7 P7 P% |8 R    ③  FIFO严格地遵循先进先出规则,对管道及FIFO的读总是从开始处返回数据,对它们的写则是把数据添加到末尾,它们不支持如 lseek()等文件定位操作。
  \& Q0 I$ A1 B7 v5 V7 B. P! I  q9 g  A/ I0 P, M
     有名管道的创建可以使用函数 mkfifo(),该函数类似与文件中的 open()操作,可以指定管道的路径和打开的模式。咱们还可以在命令行使用“mknod 管道名 p”来创建有名管道。: u5 u) ?( E5 o1 X  c

0 u) @+ R* F- u6 l  E& k, O% B     在管道创建成功后,就可以使用open()、write()和read()这些函数了。与普通文件的开发设置一样,对于为读而打开的管道可在open()中设置O_RDONLY,对于为写而打开的管道可在open()中设置O_WRONLY,在这里与普通文件不同的是阻塞问题。由于普通文件在读写时不会出现阻塞问题,而在管道的读写中却有阻塞的可能,这里的非阻塞标志可以在open()函数中设定为O_NONBLOCK。下面分别对阻塞打开和非阻塞打开的读写进行讨论。
. _2 R& j9 Y" y* o/ W7 D( v
4 }; _- R8 k! k- U1 Q     对于读进程:7 J# ~. o& d! o6 D. L
# u/ S$ M/ l& [
    ●  若该管道是阻塞打开,且当前FIFO内没有数据,则对读进程而言将一直阻塞到有数据写入。5 X* R3 |+ a) q. p, ^( Q8 m5 `: x
! G+ o( V1 _2 Y4 E( {
    ●  若该管道是非阻塞打开,则不论FIFO内是否有数据,读进程都会立即执行读操作。即如果FIFO内没有数据,则读函数将立刻返回0。# G9 y( |7 H3 m' D( \/ C
  g2 T6 G1 G9 d' g  M2 ?2 X
    对于写进程:( b; \: g0 O6 ^
2 l5 J& y& L* ~
    ●  若该管道是阻塞打开,则写操作将一直阻塞到数据可以被写入。0 _( V  b& M. @) o
- L) X4 S) H2 T1 l# m
    ●  若该管道是非阻塞打开而不能写入全部数据,则读操作进行部分写入或者调用失败。
% w  }( K5 H; d7 e9 w* H3 d, B2 B2 ~* p+ W/ L6 F
   下表列出了mkfifo()函数的语法要点
! Y# D) P: s( a: A- r5 O6 ]( S( E% q3 ^; J( q! d& u
游客,如果您要查看本帖隐藏内容请回复
3 R" N: `( O; k4 _1 O

3 H, |$ B* f* e3 C( N  k
7 [# ~  Y# c. m/ c! a6 u
: u8 _6 g! u5 p0 \6 i( { # S5 W: P% m' n9 ~) V/ \
$ H: g, R; n( \. O: {4 a
' l2 h* v8 |& ?2 v

  `( |) Z+ N! u3 r+ @! v# r) d! r$ Q' R8 l& O- _

该用户从未签到

2#
发表于 2019-9-24 18:05 | 只看该作者
谢谢楼主分享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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