mysql数据变化通通知机制_异步通知机制的总结

要弄明白这个问题,我们得从最基本的原理开始。我们知道,驱动程序运行在内核空间中,应用程序运行

在用户空间中,两者是不能直接通信的。但在实际应用中,在设备已经准备好的时候,我们希望通知用户

程序设备已经ok,用户程序可以读取了,这样应用程序就不需要一直查询该设备的状态,从而节约了资源

,这就是异步通知。

好,那下一个问题就来了,这个过程如何实现呢?简单,两方面的工作。

一 驱动方面:

1. 在设备抽象的数据结构中增加一个struct fasync_struct的指针

2. 实现设备操作中的fasync函数,这个函数很简单,其主体就是调用内核的fasync_helper函数。

3. 在需要向用户空间通知的地方(例如中断中)调用内核的kill_fasync函数。

4. 在驱动的release方法中调用前面定义的fasync函数

呵呵,简单吧,就三点。其中fasync_helper和kill_fasync都是内核函数,我们只需要调用就可以了。在

1中定义的指针是一个重要参数,fasync_helper和kill_fasync会使用这个参数。

二 应用层方面

1. 利用signal或者sigaction设置SIGIO信号的处理函数

2. fcntl的F_SETOWN指令设置当前进程为设备文件owner

3. fcntl的F_SETFL指令设置FASYNC标志

完成了以上的工作的话,当内核执行到kill_fasync函数,用户空间SIGIO函数的处理函数就会被调用了。

呵呵,看起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值