首页 理论教育 poll接口与Linux驱动程序开发实例

poll接口与Linux驱动程序开发实例

时间:2026-01-26 理论教育 东北妞 版权反馈
【摘要】:应用层可以使用select函数查询设备当前的状态,以便用户程序获知是否能对设备进行非阻塞的访问。使用select函数需要在设备驱动程序中添加file_operations一>poll接口支持。文件描述符集常用函数接口如下:FD_ZERO//清除一个文件描述符集FD_SET//将文件描述符fd加入文件描述符集中FD_CLR//将文件描述符fd从文件描述符集中清除FD_ISSET//判断文件描述符fd是否被置位例1.8 poll接口驱动程序示例代码见\samples\1door\1-7poll。

如果设备被设置成阻塞式操作,即当设备执行I/O操作时,如果不能获得数据,将阻塞,直到获得数据。应用层可以使用select函数查询设备当前的状态,以便用户程序获知是否能对设备进行非阻塞的访问。使用select函数需要在设备驱动程序中添加file_operations一>poll接口支持。一个典型的字符驱动程序的file_operations->poll函数的实现如下:

驱动程序中的poll函数返回的标志如下:

应用层多路I/O选择函数select的原型如下:

int select(int numfds,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,struct timeval*timeout);

其中readfds、writefds、exceptfds分别是被select函数监视的读、写和异常处理的文件描述符集合,numfds的值为需要监视的号码最高的文件描述符加1。timeout参数是一个指向timeval结构类型的指针,是超时时间。select函数在两种情况下会返回,一种是所监视的设备中有一些设备可读、可写或发生异常;另一种是超时时间到达。文件描述符集常用函数接口如下:

FD_ZERO(fd_set*set)//清除一个文件描述符集

FD_SET(int fd,fd_set*set)//将文件描述符fd加入文件描述符集中

FD_CLR(int fd,fd_set*set)//将文件描述符fd从文件描述符集中清除

FD_ISSET(int fd,fd_set*set)//判断文件描述符fd是否被置位

例1.8 poll接口驱动程序示例

代码见\samples\1door\1-7poll。核心代码如下所示:(https://www.xing528.com)

应用程序参考代码如下:

本例运行结果如下:

[root@urbetter/home]#insmod demo.ko

[root@urbetter/home]#mknod/dev/fgj c 2240

[root@urbetter/home]#./test

read successfully:fgj

read successfully:fgj

read successfully:fgj

read successfully:fgj

...

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈