1、IO分类
阻塞IO:在进行IO操作的时候,如果资源没有准备就绪,会阻塞等待资源,如果资源准备就绪,获取资源。 常用、简单、效率很低 非阻塞IO:在进行IO操作的时候,如果资源没有准备就绪,返回错误信息,如果资源就绪,获取资源。 任务不会阻塞、轮询访问,CPU的消耗较大。 IO多路复用:将所有操作的IO放到一个集合中,检测集合中准备就绪的IO,然后进行IO操作。 允许同时对多个IO进行操作。 信号驱动IO:资源准备就绪的时候,由内核向任务发送SIGIO信号,任务接收到信号后,去进行IO操作。
2、阻塞IO
资源没有准备就绪,会一直等待常用的有fgets、read、write、accept......
3、非阻塞IO
应用程序在执行的时候告诉系统,如果资源准备就绪,返回资源,如果没有准备就绪,返回错误信息。 实现方式更多采用轮询(polling)具体实现步骤:1) 需要将IO设置为非阻塞模式;a, 打开的时候以非阻塞方式去得到;open(pathname, O_NONBLOCK | O_RDWR);b,在得到IO的文件描述符后,可以去设置。#include <unistd.h>#include <fcntl.h>int fcntl(int fd, int cmd, ... /* arg */ );参数:参数1:fd表示文件描述符参数2:int cmd, ... /* arg */ 是可变参数,返回值:成功:F_GETFL Value of file status flags.<