非堵塞IO

文章介绍了低速IO,这类系统调用可能导致进程永久堵塞,如读写特殊文件、管道、设备文件等无数据情况。同时阐述了非堵塞IO,允许操作在无法完成时立即返回错误,而非一直等待。通过设置O_NOBLOCK标志可以在open或fcntl函数中实现非堵塞IO。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、IO操作基本概念


低速IO的认识

系统调用的IO操作可以分两类:低速IO 、其他

低速IO:“低速”系统调用,可能会使进程永远堵塞,譬如:
    某些特殊的文件:管道文件、设备文件、套接字文件中的被没有数据可读,读操作可能会永久堵塞调用者
    
    某些数据不能被相同的文件类型接受(如管道文件内无空间,或者网络流控制),写操作可能会让调用者永久堵塞。
    
    用只写模式打开FIFO,如果没有其他进程以只读的方式提前用只读打开,也会造成堵塞
    
    对已经加上强制性记录所的文件进行读写
    
    某些ioctl控制设备文件描述符操作时候
    
    进程间通信中的IPC操作等
    
    切记,读取磁盘文件有时候会暂时堵塞程序,但是不能把这种情况称为低速IO。

非堵塞IO的认识

当我们调用系统IO接口(open read write等IO操作函数)可使其操作不会永远堵塞
如果没数据等情况导致这些操作不能完成,则接口就会直接返回错误退出。

设置非堵塞IO的方法:
    在调用open接口获取文件描述符时可以把文件的打开方式设置成 O_NOBLOCK方式
    对于已经调用open接口获取文件描述符了,可以调用fcntl函数设置文件描述符有O_NOBLOCK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值