Linux驱动开发 IO模型:非阻塞IO

1、非阻塞IO模型是什么

当应用程序发起读取数据(read)的时候,不管数据有没有准备好,read函数都应该立即返回。如果数据准备好了,立即返回数据,如果没有准备好,返回错误码。

2、应用程序

在使用非阻塞IO模型时,应用程序应该这样打开文件

open("/dev/mycdev",O_RDWR|O_NONBLOCK);

3、驱动程序

在驱动程序中,如果看到应用程序使用非阻塞IO打开文件时,就看看数据是否准备好了,如果数据准备好了,立即返回数据,如果没有准备好,返回错误码。

在file_operations中实现的read函数如果判断应用程序使用了非阻塞方式打开

if(file->f_flags & O_NONBLOCK) {
    //如果数据准备好了,立即返回数据,如果没有准备好,返回错误码。
}

4、将阻塞打开的文件设置为非阻塞

int flags = fcntl(fd, F_GETFL); 
fcntl(fd, F_SETFL, flags | O_NONBLOCK); /* 非阻塞方式 */ 

你可能感兴趣的:(驱动开发)