Linux通知链机制

1. 概念

通知链只能在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。

通知链是一个函数链表,链表上的每一个节点都注册了一个函数。当某个事件发生时,链表上所有节点对应的函数就会被执行。和系统调用signal的思想差不多。

 

2. 通知链的运作机制

2.1 被通知者:对某一事件感兴趣的一方。定义了当事件发生时,相应的处理函数,将其注册到通知链中,即回调函数。

2.2 通知者:事件的通知者。当检测到某事件或自身产生事件时,执行通知链上所有的事件(遍历并执行通知链表上的所有回调函数)。

 

3. 举例

3.1 模块A

3.1.1 使用各种变种去定义自己的通知链(比如zhangsan_handler_list)

static ATOMIC_NOTIFIER_HEAD(sijifan_handler_list);

3.1.2 封装一个接口提供给其它模块注册通知事件

int register_sijifan_handler(struct notifier_block *nb)
{
    return atomic_notifier_chain_register(sijifan_handler_list, nb);
}

3.1.3 执行通知链上的事件

void do_notifier()
{   //在atomic_notifier_call_chain函数中遍历并执行sijifan_handler_list链表上的所有事件
    atomic_notifier_call_chain(sijifan_handler_list,1,NULL);
}

 

3.2 其它模块(除模块A以外的模块)

3.2.1 定义自己的通知事件

struct notifier_block eat;
int eat_bread(){······}
eat.notifier = eat_bread;
eat.xxx = xxx;

3.2.2 注册eat事件到zhangsan_handler_list通知链

register_sijifan_handler(&eat);    //使用模块A提供的注册接口

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值