如果我有一个程序使用mkfifo创建并尝试打开命名管道,如何在不阻塞的情况下打开管道进行读取或写入操作?
具体来说,我正在编写一个C程序,可以带或不带Java编写的GUI界面。
在C程序中,我成功地使用mkfifo创建了命名管道,但当我执行操作时,会发生阻塞。
具体来说,我正在编写一个C程序,可以带或不带Java编写的GUI界面。
在C程序中,我成功地使用mkfifo创建了命名管道,但当我执行操作时,会发生阻塞。
FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/
fopen不会返回,直到GUI打开写入管道。 我想做的是让那个管道准备好被读取,一旦(如果)GUI决定写入它 - 我将在select()调用中放置文件描述符。 可以合理地期望java GUI可能根本不会启动,因此我不能指望它在任何特定时间甚至根本没有打开管道的另一端。
我还将打开第二个管道进行写入,并且我认为我将面临相同的问题。 此外,我无法在没有读取器的输出管道上设置O_NONBLOCK。
有什么建议吗?
(这在Linux系统上运行)