阻塞IO和非阻塞IO
- IO 本质是基于操作系统接口来控制底层的硬件之间数据传输,并且在操作系统中实现了多种不同的IO的方式(模型)
- IO 模型描述的是不同的 IO 方式,比较常用的几种
- 阻塞型 IO 模型9
- 非阻塞型 IO 模型
- 多路复用 IO 模型
- 阻塞型 IO
- 当进程发出 IO 请求后,阻塞进程(让进程进入睡眠状态),资源就绪后唤醒进程继续执行
- 一般默认的 IO 操作都是阻塞型 IO
- 特点
- 会一直等待,直到数据就绪
非阻塞型 IO
- 当进程发出 IO 请求后,无论资源是否就绪都会立即返回,相应的模型如下:
- 实现非阻塞 IO,需要设置 O_NONBLOCK 标志,设置有两种方式
- 可以通过调用 fcntl 函数来进行设置
- 通过 open 函数来进行设置,一般在打开文件时就需要设置
- fcntl 函数
- 函数头文件
- #include <unistd.h>
- #include <fcntl.h>
- 函数原型
- int fcntl(int fd, int cmd, ... /* arg */ );
- 函数功能
- 通过命令字(cmd)来设置文件描述符
- 函数参数
- fd : 文件描述符
- cmd : 控制命令字
- F_GETFD: 获取文件描述符标志
- F_SETFD: 设置文件描述符标志
- F_GETFL: 获取文件状态标志
- F_SETFL : 设置文件状态标志
- 函数头文件