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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
有名管道(FIFO)4 k  S1 {  @- l" {/ P

* q$ L! f0 }  c8 I, m   首先将上一节的有关有名管道的定义再贴出来! A5 d( m6 Z9 u0 h  Y, g

, s/ q5 P( k: H: z- B  ?0 f. e+ v. {    有名管道是对无名管道的一种改进,它具有以下特点:
( f  S7 }" t$ r" O) s- u  P0 _; J+ h1 P
    ①  它可以使互不相关的两个进程间实现彼此通信;5 k1 \, {$ S6 C$ d

0 T/ y7 l& I& o4 ~. ?. x    ②  该管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当做普通文件一样进行读写操作,使用非常方便;, l$ N& S4 b1 y% |

6 b8 E* X, N# s9 @) g7 {8 _    ③  FIFO严格地遵循先进先出规则,对管道及FIFO的读总是从开始处返回数据,对它们的写则是把数据添加到末尾,它们不支持如 lseek()等文件定位操作。
$ o5 o" k/ K2 R0 ~6 P4 g4 n) x/ X! O0 ^' P
     有名管道的创建可以使用函数 mkfifo(),该函数类似与文件中的 open()操作,可以指定管道的路径和打开的模式。咱们还可以在命令行使用“mknod 管道名 p”来创建有名管道。
$ s( e, `+ l1 U! O/ k- m4 q4 c4 }0 U1 V4 X0 f2 Z. p/ K
     在管道创建成功后,就可以使用open()、write()和read()这些函数了。与普通文件的开发设置一样,对于为读而打开的管道可在open()中设置O_RDONLY,对于为写而打开的管道可在open()中设置O_WRONLY,在这里与普通文件不同的是阻塞问题。由于普通文件在读写时不会出现阻塞问题,而在管道的读写中却有阻塞的可能,这里的非阻塞标志可以在open()函数中设定为O_NONBLOCK。下面分别对阻塞打开和非阻塞打开的读写进行讨论。
  _* N! v4 c7 Z4 X- D* ^
( P8 O0 J8 j/ X     对于读进程:9 x( P4 K# ?% m  a8 c3 ~  H! z
: W. Z, s, B7 z! j- l$ r5 _1 g0 s$ J
    ●  若该管道是阻塞打开,且当前FIFO内没有数据,则对读进程而言将一直阻塞到有数据写入。- I2 w0 T) L3 x8 A5 c

8 p5 E9 X6 R6 V  G; r: p    ●  若该管道是非阻塞打开,则不论FIFO内是否有数据,读进程都会立即执行读操作。即如果FIFO内没有数据,则读函数将立刻返回0。( Q& i" z" O. z8 O/ z8 T% j" _, b

1 T  t8 ~* K5 {* v    对于写进程:0 P! H0 Z) Z. t6 C6 u* X/ K# g
! Q/ c- A3 a9 L: m! L. q( Q8 F
    ●  若该管道是阻塞打开,则写操作将一直阻塞到数据可以被写入。
9 R9 r2 i, H* U
( Z. N; ?/ m9 Y5 F& u& q    ●  若该管道是非阻塞打开而不能写入全部数据,则读操作进行部分写入或者调用失败。
3 m0 p. H  Q1 `/ A3 c. J2 D) X3 a8 l/ d* Z0 `( I
   下表列出了mkfifo()函数的语法要点
' f, o$ o( n' k* C( n& u8 i# ?# C0 C# G1 t! o' g7 Z. ?- e2 n. s
游客,如果您要查看本帖隐藏内容请回复
. o+ ^8 `1 u2 B, G6 C& y2 l

* l6 c; y9 x) Y6 c; {' {# S( X; r* Z- I2 s" o( e& h3 w

0 l1 m; p3 `7 u & i5 T. I3 [- j0 Q0 B
0 V$ T% d# ?& n% p! D/ O- X1 R

) s% @- N/ j9 F3 X8 [/ e; r9 ]5 `# o! _0 t0 E

: k# L  b+ A/ b; p

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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