为什么在打开写入之前必须打开FIFO文件?

时间:2013-11-28 14:42:50

标签: unix file-io kernel pipe fifo

为什么Unix中FIFO的函数open()是不对称的?为什么我们需要首先打开FIFO进行读取然后再写入? 在linux/fs/fifo.c写的:

/*
 *  O_RDONLY
 *  POSIX.1 says that O_NONBLOCK means return with the FIFO
 *  opened, even when there is no process writing the FIFO.
 */

/********
 *  O_WRONLY
 *  POSIX.1 says that O_NONBLOCK means return -1 with
 *  errno=ENXIO when there is no process reading the FIFO.
 */

为什么我们首先要开放写作和阅读后?

1 个答案:

答案 0 :(得分:0)

我想原因是许多应该留在读取端的程序也打开它进行写入,其明确目的是在客户端关闭其写入结束时避免出现SIGPIPE / IO错误;就内核而言,作者,除了它从不写,所以在实践中,读取将看到阻塞读取。

示例:clockspeed.c