如果设备驱动已经准备好数据,可以采用异步通知的方式通知应用层来读取,这样应用程序就不需要一直查询设备的状态。要支持异步通知,需要实现字符设备驱动程序的fasync接口。当一个打开的文件的FASYNC标志变化时,file_operations->fasync()接口将被调用。file_operations->fasync函数会调用fasync_helper函数从相关的进程列表中添加或去除异步通知关联。fasync_helper函数的定义如下(其中on参数为0表示去除异步通知,为1表示添加异步通知):
int fasync_helper(int fd,struct file*filp,int on,struct fasync_struct**fapp);
当数据到达时,kill_fasync函数将被用来通知相关的进程:
void kill_fasync(struct fasync_struct**fp,int sig,int band);
例1.9 异步通知实例
代码见\samples\1door\1-8fasync。驱动层代码如下:
当数据到达时,调用kill_fasync通知应用层,这里采用定时器来模拟数据就绪,发出通知。
注意:POLL_IN表示设备可读,POLL_OUT表示设备可写。应用层参考代码如下:
本例运行结果如下:(www.xing528.com)
[root@urbetter/home]#insmod demo.ko
[root@urbetter/home]#mknod/dev/fcn c 2260
[root@urbetter/home]#./test
add_timer...
open/dev/fcn successfullysimple_fasync...
simple_timer_handler...
kill_fasync...
fasync_handler entering
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。