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

本文解释了在使用非阻塞模式打开FIFO进行写操作时遇到的问题及原因,并提供了三种解决方案:1. 使用读写模式打开;2. 去除非阻塞标志;3. 确保先打开读端。

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

来自:上海代数律动技术有限公司

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值