一、命名管道的概念
管道的一个不足之处是没有名字,因此,只能用于具有亲缘关系的进程间通信,在命名管道(named
pipe或FIFO)提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存储于文件系统中。命名管道是一个设备文件,因此,即使进程与创建FIFO的进程不存在亲缘关系,只要可以访问该路径,就能够通过FIFO相互通信。值得注意的是,FIFO(first
input first output)总是按照先进先出的原则工作,第一个被写入的数据将首先从管道中读出。
二、命名管道的创建与读写
Linux下有两种方式创建命名管道。一是在Shell下交互地建立一个命名管道,二是在程序中使用系统函数建立命名管道。Shell方式下可使用mknod或mkfifo命令,下面命令使用mknod创建了一个命名管道:
mknod namedpipe
创建命名管道的系统函数有两个:mknod和mkfifo。两个函数均定义在头文件sys/stat.h,函数原型如下:
#include
#include
int mknod(const char *path,mode_t mod,dev_t dev);
int m