mkfifo创建命名管道,调用open(O_WRONLY|O_NONBLOCK)打开失败
|
mkfifo创建命名管道,调用open(O_WRONLY|O_NONBLOCK)打开失败
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)。
|
|
|
|
|
|