使用 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,出现这个错误,暂时做点别的,稍后再试, 重复直到成功。
我正在尝试使用以下命令打开命名管道 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,出现这个错误,暂时做点别的,稍后再试, 重复直到成功。