我已经研究了各种不同的Linux命名管道客户端/服务器实现,但它们大多数使用默认的阻塞读/写。由于我已经使用poll()检查其他标志,所以我认为通过poll()检查传入的FIFO数据也是一个好主意...
经过所有的研究,我认为以O_RDWR模式打开管道是防止在没有写入者打开管道时出现无限数量的EOF事件的唯一方法。
这样,管道的两端都关闭了,其他客户端也可以打开可写端。要回复,我将使用单独的管道...
我的问题是,尽管我找到了一些使用O_RDWR标志的示例,但open()手册描述了当分配给FIFO时该标志未定义。(http://linux.die.net/man/3/open)
但是如果没有O_RDWR,你如何在管道上使用poll()?你认为“O_RDWR”是打开管道的合法方式吗?
经过所有的研究,我认为以O_RDWR模式打开管道是防止在没有写入者打开管道时出现无限数量的EOF事件的唯一方法。
这样,管道的两端都关闭了,其他客户端也可以打开可写端。要回复,我将使用单独的管道...
我的问题是,尽管我找到了一些使用O_RDWR标志的示例,但open()手册描述了当分配给FIFO时该标志未定义。(http://linux.die.net/man/3/open)
但是如果没有O_RDWR,你如何在管道上使用poll()?你认为“O_RDWR”是打开管道的合法方式吗?
mkfifo(3)
和fifo(7)
的手册?这样你就不会收到无限数量的 EOF 事件了。你不能在一侧使用O_RDONLY
,在另一侧使用O_WRONLY
(然后适当地进行poll
)吗?而且fifo(7)
明确指出:“以读写方式打开 FIFO 在阻塞和非阻塞模式下都将成功”。 - Basile Starynkevitch