为什么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.
*/
为什么我们首先要开放写作和阅读后?
答案 0 :(得分:0)
我想原因是许多应该留在读取端的程序也打开它进行写入,其明确目的是在客户端关闭其写入结束时避免出现SIGPIPE / IO错误;就内核而言,是作者,除了它从不写,所以在实践中,读取将看到阻塞读取。
示例:clockspeed.c