第四章 通知链
2019-12-26 11:00
791 查看
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
通知链是一份函数列表,当给定事件发生时予以执行。列表中的每个函数都让另一个子系统知道,调用此函数的子系统内所发生的一个事件或子系统所侦测到个一个事件。
通知链使用发布-订阅(publish-and-subcribe)模型:
- 被通知者 ——接收某事件的子系统,提供回调函数予以调用
- 通知者 ——感受到一个事件并调用回呼函数的子系统 通知
通知链列表元素的类型是notifier_block,定义:
/* * notifier_call 要执行的函数 * next 链接列表的元素 * priority 优先级 */ struct notifier_block{ int (*notifier_call)(struct notifier_block *self, unsigned long, void *); struct notifier_block *next; int priority; }
网络子系统通知链:
- inetaddr_chain ——发送有关本地接口上的IPv4地址的插入、删除以及变更的通知信息
- inet6addr_chain —— 发送有关本地接口上的IPv6地址的插入、删除以及变更的通知信息
- netdev_chain —— 发送有关网络设备注册状态的通知信息
/*struct nofitier_block **list 为通知链*/ /*注册*/ int notifier_chain_register(struct nofitier_block **list, struct notifier_block *n); /*除名*/ int notifier_chain_unregister(struct nofitier_block **list, struct notifier_block *n);
回调函数:
注册 | 除名 | |
---|---|---|
inetaddr_chain | register_inetaddr_notifier | unregister_inetaddr_notifier |
inet6addr_chain | register_inet6addr_notifier | unregister_inet6addr_notifier |
netdev_chain | register_netdevice_notifier | unregister_netdevice_notifier |
通知:
/* * n 通知链 * val事件类型 * v 输入参数 * 返回值: NOTIFY_OK-通知信息被正确处理 NOTIFY_DONE - 对通知信息不敢兴趣 NOTIFY_BAD - 有些事情出错,停止调用此事件的回调函数 NOTIFY_STOP - 函数被正确调用,此事件不需要进一步调用其他回调函数 NOTIFY_STOP_MASK - 由notifier_call_chain检查,以了解是否停止调用回调函数,或者继续调用下去 */ int notifier_call_chain(struct notifier_block **n, unsigned long val, void *v) { int ret = NOTIFY_DONE; struct notifier_block *nb = *n; while(nb) { ret = nb->notifier_call(list,val,v); if(ret&NOTIFY_STOP_MASK) { return ret; } nb = nb->next; } return ret; }
相关文章推荐
- 《剑指offer》第四章 解决面试题的思路 总结
- 第四章朴素贝叶斯法----生成模型
- JAVA学习笔记——第四章 流程控制
- 麒麟KY-RTI分布仿真技术:第四章 C++程序设计
- 第四章、SpringMVC学习-Controller接口控制器详解(4)
- 操作系统第四章
- JAVA核心技术 第四章 对象与类 类设计技巧
- 第四章、数组
- 《java核心技术》(原书第七版)读书笔记之第四章
- 第四章——上机
- 第四章例题练习
- python网络爬虫从入门到实践,第四章第二节测试代码
- 第四章作业
- 《大型网站技术架构原理与解析》第四章 瞬时响应:网站的高性能架构
- 第四章作业一
- R语言统计入门第四章描述性统计和图形——4.1单组的汇总统计量
- 第四章:4.2MySQL 权限系统介绍
- NPDP知识推送-第四章文化、组织与团队(2)
- python参考手册 第四章
- 第四章