曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 7664|回复: 1
打印 上一主题 下一主题

管道

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2009-7-21 00:13:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
管道是一种两个进程间进行单向通信的机制。因为管道传递数据的单向性,管道又称之为半双工管道。管道的这一特点决定了其使用的局限性。
      数据只能由一个进程流向另一个进程( 其中一个写管道,另一个读管道 );如果要进行全双工通信,需要建立两个管道。
      管道只能用于父子进程或者兄弟进程之间的通信,也就是说管道只能用于具有亲缘关系的进程间通信,无亲缘关系的进程不能使用管道。
除了以上局限性,管道还有其他一些不足,如管道没有名字,管道的缓冲区大小是受限制的,管道所传送的是无格式的字节流。这就要求管道的输入方和输出方事先约定好数据的格式。虽然有这么多不足,但对于一些简单的进程间的通信,管道还是完全可以胜任。

使用管道进行通信时,两端的进程向管道读写数据是通过创建管道时,系统设置的文件描述符进行的。因此对于管道两端的进程来说,管道就是一个特殊的文件,这个文件只存在于内存中。在创建管道时,系统为管道分配一个页面作为数据缓冲区,进行管道通信的两个进程通过读写这个缓冲区来进行通信。

通过管道通信的两个进程,一个进程向管道写数据,另外一个进程从管道的另一端读数据。写入的数据每次都添加在管道缓冲区的末尾,读数据的时候都是从缓冲区的头部读出数据。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
沙发
 楼主| 发表于 2009-7-24 03:23:05 | 只看该作者

有名管道

概念
管道的一个不足之处是没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道 ( named pipe 或者 FIFO ) 提出后,该限制得到了克服。FIFO 不同于管道之处在于它提供了一个路径名与之关联,以 FIFO 的文件形式存储于文件系统中。有名管道是一个设备文件。因此,即使进程与创建 FIFO 的进程不存在亲缘关系,只要可以访问该路径,就能够通过 FIFO 相互通信。值得注意的是,FIFO ( First In First Out ) 总是按照先进先出的原则工作,第一个被写入的数据将首先从管道中读出。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-19 08:08 , Processed in 0.075308 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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