1. IO模型的种类
- 非阻塞
- 阻塞
- IO多路复用
- 异步通知
2.非阻塞IO模型
非阻塞IO模型:当应用程序想要通过驱动读取硬件中的数据的时候,不管底层的数据使用准备好read函数调用的时候都不会阻塞,如果数据准备好了能成功读取到,如果数据没有准备好返回错误码。
us:
fd = open("/dev/mycdev",O_RDWR|O_NONBLOCK); //非阻塞方式打开
read(fd,buf,sizeof(buf));
------------------------------------------------------
ks:
driver_read()
{
if(file->f_flags & O_NONBLOCK){
//非阻塞
//读取硬件中的数据,将数据返回到用户空间即可
}
}
将阻塞打开的文件改成非阻塞:
fd = open("/dev/mycdev",O_RDWR); //阻塞方式打开
unsigned int flags = fcntl(fd,F_GETFL)
fcntl(fd,F_SETFL,flags|O_NONBLOCK);<