成功源于积累----波爸

思想决定高度,行动决定成败!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

---管道是半双工的,数据只能向一个方向流动,需要双方通信时,需要建立起两个管道;

---只能用于父子进程或兄弟进程之间(具有亲缘关系的进程)

---单独构成一个独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一个文件系统,并且只存在于内存中。

---数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加到管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。

 

用read、write即可完成读写。

管道两端可分别用描述字fd[0] 和  fd[1] 来描述,需要注意的是,管道的两端是固定了的任务。

管道也是一种文件,也用close 关闭即可。

 

管道的局限:

1、只支持单向数据流;

2、只能用于具有亲缘关系的进程之间;

3、管道的缓冲区是有限的(管道制存于内存之中,在管道创建时,为缓冲区分配一个页面的大小)

4、管道所传送的是无格式字节流,这就要求管道的读出方和写入方事先约定好数据的格式,比如多少字节算一个消息等等。

 

 

命名管道:

管道应用的一个重大限制是它没有名字,因此只能用于具有亲缘关系的进程间通信,在有名管道提出后,该限制得到了克服。

FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统之中,

 

管道包括无名管道和有名管道两种,前者用于父进程和子进程之间的通信,后者用于运行于同一台机器上的任意两个进程间的通信。

无名管道由pipe()函数创建:

#include<unistd.h>

int pipe(int fields[2]);

 

posted on 2012-06-08 20:37  沙场醉客  阅读(179)  评论(0编辑  收藏  举报