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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
有名管道(FIFO)
0 e1 F- j' }* J
$ J: U  f- }0 a6 A9 p8 |; k   首先将上一节的有关有名管道的定义再贴出来3 t0 l- @* a7 H
* u5 L* \* [2 z8 j4 b2 r3 ~
    有名管道是对无名管道的一种改进,它具有以下特点:6 S' d2 ~, G  U1 ]7 e8 n; K: c0 N

: ^  D" _$ b: d    ①  它可以使互不相关的两个进程间实现彼此通信;
; ]7 G6 D- V% }
5 G' A* v! x/ G( \) C    ②  该管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当做普通文件一样进行读写操作,使用非常方便;
$ v  O" W7 {  c/ L
% v% }- U  B8 o5 y    ③  FIFO严格地遵循先进先出规则,对管道及FIFO的读总是从开始处返回数据,对它们的写则是把数据添加到末尾,它们不支持如 lseek()等文件定位操作。
# h+ }: C, x6 r) ?. P
* [* b: R" A: p: K0 R+ `# Z     有名管道的创建可以使用函数 mkfifo(),该函数类似与文件中的 open()操作,可以指定管道的路径和打开的模式。咱们还可以在命令行使用“mknod 管道名 p”来创建有名管道。
. W. @9 i- A' u) j+ }
) C1 h+ G0 H. U     在管道创建成功后,就可以使用open()、write()和read()这些函数了。与普通文件的开发设置一样,对于为读而打开的管道可在open()中设置O_RDONLY,对于为写而打开的管道可在open()中设置O_WRONLY,在这里与普通文件不同的是阻塞问题。由于普通文件在读写时不会出现阻塞问题,而在管道的读写中却有阻塞的可能,这里的非阻塞标志可以在open()函数中设定为O_NONBLOCK。下面分别对阻塞打开和非阻塞打开的读写进行讨论。
$ [+ }, n, y2 }! u+ ]! n1 W
; l( {2 h5 U5 V. o; G     对于读进程:# L! y0 T: r  U1 W
3 U0 y9 T9 b: @3 w
    ●  若该管道是阻塞打开,且当前FIFO内没有数据,则对读进程而言将一直阻塞到有数据写入。
0 r9 D6 F- U0 L4 p% e: X: R
' n; X3 ~. l" R" D9 t! N( a" Z    ●  若该管道是非阻塞打开,则不论FIFO内是否有数据,读进程都会立即执行读操作。即如果FIFO内没有数据,则读函数将立刻返回0。
7 c" {: T/ A  l" S* V; ?  h1 I! b& R1 V  Q* t
    对于写进程:
3 w/ K% ]: b+ ?. _/ E* Q1 u7 o/ g, M; ~+ `  E. c, Z: N
    ●  若该管道是阻塞打开,则写操作将一直阻塞到数据可以被写入。
: R/ L) B, x& z' |1 A! {+ v8 ^7 I0 r, X2 Z" B. W
    ●  若该管道是非阻塞打开而不能写入全部数据,则读操作进行部分写入或者调用失败。$ f: \7 ~1 G4 ]; T% [; T% w

  i* g/ f" P. Y+ v   下表列出了mkfifo()函数的语法要点/ }6 n: J: g- l0 g) i
$ A* i+ }$ S) x* a* u
游客,如果您要查看本帖隐藏内容请回复
( x3 Y/ T- [5 t5 ?
( _+ W0 o% a! s# O4 i
0 Z3 C1 J7 H: W1 n' V2 l: r# M

3 @+ ?1 |" L2 A 7 z# L/ Y& c! s' @  @" l  R
* L" F5 q6 ~* @" ^1 G9 e3 b; u2 x2 h
3 A6 @$ R1 w" C. s. j
4 k! h% g5 g; N9 z) j
! Q+ v# M, n2 Q( x/ B0 _& I- t

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 08:27 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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