mkfifo创建命名管道,调用open(O_WRONLY|O_NONBLOCK)打开失败

Linux Linux 1003 人阅读 | 0 人回复

发表于 2024-5-8 11:15:10 | 显示全部楼层 |阅读模式

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)。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则