使用 O_WRONLY 标志在 c 中打开命名管道时出错

Error opening named pipe in c using O_WRONLY flag

我正在尝试使用以下命令打开命名管道 properties/permissions:

prw------- 1 myUser    0 FEB 17 20:08 fifoName

我需要打开是非阻塞的,所以程序不会挂起。我还需要以只写模式打开管道。但是,我遇到了一些问题...

以下作品:int fd = open("fifoName", O_RDONLY | O_NONBLOCK);

以下作品:int fd = open("fifoName", O_RDWR | O_NONBLOCK);

以下不工作:int fd = open("fifoName", O_WRONLY | O_NONBLOCK);,fd 设置为 -1。

我需要能够打开设置了 O_WRONLY 标志的管道。我能够打开管道并使用 O_RDWR 标志集写入它。所以我不明白为什么它也不适用于 O_WRONLY 标志。

非常感谢您的帮助!!!!

来自Linux fifo(7) manpage:

A process can open a FIFO in nonblocking mode. In this case, opening for read-only succeeds even if no one has opened on the write side yet and opening for write-only fails with ENXIO (no such device or address) unless the other end has already been opened.

所以当你说

int fd = open("fifoName", O_WRONLY | O_NONBLOCK);

正在返回 -1,这似乎是一个安全的赌注,另一端未打开并且 errno 被设置为 ENXIO(您可以使用 perror()strerror()open() 和任何其他设置 errno 失败时得到一个很好的人类可读错误。)

如果用O_RDWR打不开,可以尝试用non-blocking方式打开FIFO,出现这个错误,暂时做点别的,稍后再试, 重复直到成功。