fasync的总结
我们知道,驱动程序运行在内核空间中,应用程序运行在用户空间中,两者是不能直接通信的。但在实际应用中,在设备已经准备好的时 候,我们希望通知用户程序设备已经ok,用户程序可以读取了,这样应用程序就不需要一直查询该设备 的状态,从而节约了资源,这就是异步通知。
相关函数原型:
int fasync_helper(struct inode *inode, struct file *filp, int mode, struct fasync_struct **fa);
作用:一个"帮忙者", 来实现 fasync 设备方法.
fasync_helper 被调用来从相关的进程列表中添加或去除入口项, 当 FASYNC 标志因一个打开文件而改变。 它的所有参数除了最后一个, 都被提供给 fasync 方法并且被直接传递. 当数据到达时 kill_fasync被用来通知相关的进程. 它的参数是被传递的信号(常常是 SIGIO)和 band 。
参数:
mode :参数是传递给方法的相同的值,
fa : 指针指向一个设备特定的 fasync_struct *
void kill_fasync(struct fasync_struct *fa, int sig, int band);
如果这个驱动支持异步通知, 这个函数可用来发送一个信号到登记在 fa 中的进程.
fasync这个东西就是为了使驱动的读写和application的读写分开,使
得application可以在驱动读写时去做别的事,
通过kill_fasync(kill_fasync(&async, SIGIO, POLL_IN)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)