如何在命名管道(mkfifo)上执行非阻塞fopen?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (49)

如果我有一个程序创建并尝试使用mkfifo打开命名管道,那么如何打开一个管道进行读取或写入而不会阻塞?

具体来说,我正在编写一个可以使用或不使用gui(用Java编写)运行的C程序。

在C程序中,我成功地使用mkfifo创建了命名管道,但是当我这样做时

FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/

直到GUI打开管道进行写入,fopen才会返回。我希望做的是让管道准备好读取一次(如果)GUI决定写入它 ,我将把文件描述符放在select()调用中。期望java GUI可能永远不会被启动是合理的,所以我不能依靠它来在任何特定点甚至根本上打开管道的另一端。

有什么建议吗?

(这是在Linux系统上运行)

提问于
用户回答回答于

解决这个问题的方法是打开管道O_RDWR

扫码关注云+社区

领取腾讯云代金券