如果我有一个程序使用 mkfifo 创建并尝试打开命名管道,我如何打开管道进行读取或写入而不阻塞?
具体来说,我正在编写一个可以在有或没有 gui(用 Java 编写)的情况下运行的 C 程序。
在 C 程序中,我使用 mkfifo 成功创建了命名管道,但是当我这样做时
FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/
在 GUI 打开该管道进行写入之前, fopen 不会返回。我想要做的是让该管道准备好读取一次(如果)GUI决定写入它 - 我将把文件描述符放在 select() 调用中。可以合理地预期 java GUI 可能永远不会真正启动,因此我不能依赖它在任何特定点甚至根本无法打开管道的另一端。
我还将打开第二个管道进行写作,我想我也会遇到同样的问题。此外,我无法在没有阅读器的输出管道上设置 O_NONBLOCK。
有什么建议么?
(这是在linux系统上运行的)