管道读写的阻塞与非阻塞

在管道文件为阻塞读和阻塞写的时候,无论是先读还是先写都要等到另一个操作才能离开阻塞,也就是:

如果先读,陷入阻塞,等待写操作;如果先写,陷入阻塞,等待读操作。

而非阻塞读和非阻塞写,是无须等待另一个操作的,直接执行read()或者write()能读就读,能写就写,不能就返回-1,非阻塞读写主要是用于自己循环读取,去判断读写的长度

在使用非阻塞的时候,有一个很需要注意的地方,在fifo的man page中,有一段这样的描述:

A process can open a FIFO in nonblocking mode. In this case, opening for read-only will succeed even if no-one has opened on the write side yet, opening for write-only will fail with ENXIO (no such device or address) unless the other end has already been opened.

也就是说非阻塞模式下,以只读模式是可以open成功获得文件描述符,即使没有写端;然而,如果写端没有打开的话,只读模式是无法open成功,在确认文件存在(access(file_name, F_OK)==0)的情况下,却open返回-1往往是这个原因,可以使用循环open,或者确保写端已经打开的方法避免。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值