发布网友 发布时间:2022-04-22 08:56
共1个回答
热心网友 时间:2023-10-18 16:14
FIFO中可以很好地解决在无关进程间数据交换的要求,并且由于它们是存在于文件系统中的,这也提供了一种比匿名管道更持久稳定的通信办法。
FIFO的通信方式类似于在进程中使用文件来传输数据,只不过FIFO类型文件同时具有管道的特性。在数据读出时,FIFO管道中同时清除数据。在shell中mkfifo命令可以建立有名管道,下面通过一个实例来帮助读者理解FIFO。mkfifo命令的帮助手册如下所示:
mkfifo [option] name...
其中option选项中可以选择要创建FIFO的模式,使用形式为-m mode,这里mode指出将要创建FIFO的八进制模式,注意,这里新创建的FIFO会像普通文件一样受到创建进程的umask修正。在shell中输入命令如下:
$mkfifo –m 600 fifocat
$cat < fifocat
$./recat >fifocat
$./recat >fifocat
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <limits.h>
#define BUFES PIPE_BUF
int main ( void )
{
FILE *fp;
char * cmd = cat file1; /*shell 命令*/
char * buf[BUFSZ];
...
...
...
pclose ( fp ) ; /*关闭管道*/
exit (0) ;
}
$_
以上实例使用系统命令mkfifo创建FIFO类型文件fifocat,并通过14.2.4节的程序recat来读取文件recat.c,将程序的标准输出从定向到fifocat中,再使用命令cat从fifocat读出数据。