首页 理论教育 Linux驱动开发实例|异步通知fasync函数|示例代码

Linux驱动开发实例|异步通知fasync函数|示例代码

时间:2023-10-19 理论教育 版权反馈
【摘要】:如果设备驱动已经准备好数据,可以采用异步通知的方式通知应用层来读取,这样应用程序就不需要一直查询设备的状态。要支持异步通知,需要实现字符设备驱动程序的fasync接口。当一个打开的文件的FASYNC标志变化时,file_operations->fasync()接口将被调用。file_operations->fasync函数会调用fasync_helper函数从相关的进程列表中添加或去除异步通知关联。fasync_helper函数的定义如下:int fasync_helper;当数据到达时,kill_fasync函数将被用来通知相关的进程:void kill_fasync;例1.9 异步通知实例代码见\samples\1door\1-8fasync。

Linux驱动开发实例|异步通知fasync函数|示例代码

如果设备驱动已经准备好数据,可以采用异步通知的方式通知应用层来读取,这样应用程序就不需要一直查询设备的状态。要支持异步通知,需要实现字符设备驱动程序的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

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

我要反馈