1)代码如下:
mkfifo(FIFO_DIR,0666);//成功
open(FIFO_DIR,O_WRONLY|NONBLOCK);//失败
2)原因:
用了 nonblock 方式去打开fifo的写端,此时fifo的读端没有人open,所以一定会返回失败。必须先有人以读的方式打开fifo后,才能以nonblock方式打开写。
3)解决办法:
1)以读写都支持的方式open:open(FIFO_DIR,O_RDWR|NONBLOCK);//成功
或者
2)仍然以只写方式打开,但是去掉 O_NONBLOCK 参数:open(FIFO_DIR,O_WRONLY);
或者
3)确保读端先打开,然后再打开写端:先open(FIFO_DIR,O_RDONLY|NONBLOCK),再open(FIFO_DIR,O_WRONLY|NONBLOCK)。
来自:上海代数律动技术有限公司
本文解释了在使用非阻塞模式打开FIFO进行写操作时遇到的问题及原因,并提供了三种解决方案:1. 使用读写模式打开;2. 去除非阻塞标志;3. 确保先打开读端。


被折叠的 条评论
为什么被折叠?



