一、概述
非阻塞I/O,记录锁、系统V流控制、I/O多路转接(select和poll函数)、readv和writev函数以及存储映射I/O(mmap),这些都是高级I/O
二、非阻塞I/O
在以前的章节中将系统调用分成“低俗”系统调用和其他系统调用两类。低俗系统调用是可能会使进程永远阻塞的一类系统调用,包括如下调用:
1)读操作可能会使调用永远阻塞,如数据部存在
2)写操作可能会使调用者永远阻塞,
3)在某种条件发生之前,打开某些类型的文件会被阻塞(例如打开一个终端设备可能需等到与之连接的调职解调器应答)
4)对已经加上强制性记录所的文件进程读写
5)某些ioctl操作
6)某些进程间通信函数
非阻塞I/O使我们调用open、read和write这样的I/O操作,并使这些操作不会永远阻塞。
对于一个给定的描述符有两种方法对其指定非阻塞I/O
1)如果调用open获得描述符,则可指定O_NONBLOCK标志
2)对于已经打开的一个描述符,则可调用fcntl,由该函数打开O_NONBLOCK文件状态标志。