5.4.5 命名管道(FIFOs)

5.4.5  命名管道(FIFOs)
FIFO 文件是一个文件系统中的有名管道。任何一个进程都可以打开或者关闭FIFO,管道两端的进程不必是相关的。
你可以使用 mkfifo 命令创建一个命名管道。如下,
% mkfifo /tmp/fifo
% ls -l /tmp/fifo
prw-rw-rw- 1 samuel users 0 Jan 16 14:04 /tmp/fifo
第一个 p 指示了该文件是一个命名管道。
% cat < /tmp/fifo   //从管道读取数据
% cat > /tmp/fifo   //向管道写入数据,每按一次回车,你输入的数据都会写到另一端。
% rm /tmp/fifo //删除管道

** 在程序中创建一个管道
你可以使用 mkfifo()。第一个参数为一个创建管道的路径,第二个参数指定了管道的拥有者,组,和 其他 的权限。
如果管道创建失败 调用返回值为 -1 。

** 访问一个管道
这跟访问一个普通的文件一样。你可以使用 低级I/O函数( open, write, read,close,等)或者使用标准C 库中的
函数(fopen, fprintf,fscanf等)。

//把缓冲 data 中的数据写入FIFO,使用低级 I/O函数。
int fd = open (fifo_path, O_WRONLY);
write (fd, data, data_length);
close (fd);
//从FIFO中读取一个字符串,使用标准C库中的函数。
FILE* fifo = fopen (fifo_path, "r");
fscanf (fifo, "%s", buffer);
fclose (fifo);
不同的进程对管道的写入的数据是可以交错。

你可能感兴趣的:(c,File,buffer,Path)