Chinaunix首页 | 论坛 | 博客
  • 博客访问: 215018
  • 博文数量: 27
  • 博客积分: 527
  • 博客等级: 中士
  • 技术积分: 262
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-07 19:52
文章分类
文章存档

2013年(6)

2012年(21)

分类: LINUX

2013-03-14 19:49:42

原文地址:Linux Notifier机制 作者:wilsonwong

最近修改ct_sync代码,发现ct_sync使用了Linux Notifier, 这是很不错的一种异步通讯机制。

1。数据结构
struct notifier_block
{
    int (*notifier_call)(struct notifier_block *self, unsigned long,         void *);    /*回调处理函数*/
    struct notifier_block *next;
    int priority;
        /*用于对注册者进行优先级排队,高优先级的处理例程将被优先执行,由注册者        自己指定 */
};

2。基本例程
1) 先注册到某个notifier_block链;
extern int notifier_chain_register(struct notifier_block **list, struct notifier_block *n);
说明:这时的n可以只要初始化(*notifier_call)指针;

2)当事件发生时,调用notifier_call_chain()来触发相应的处理函数。
extern int notifier_call_chain(struct notifier_block **n, unsigned long val, void *v);
说明:轮循执行某个notifier_block链中的所有notifier_block,对其(*notifier_call)传入参数val和*v;
其中val应该是EVENT NUMBER,而*v是导致这个事件的数据结构,比如某个网络设备UP,则val=NETDEV_UP,v=dev;

3)取消注册
extern int notifier_chain_unregister(struct notifier_block **nl, struct notifier_block *n);
说明:从某个notifier_block链中移去n;

3。返回值
#define NOTIFY_DONE 0x0000 /* Don't care */
#define NOTIFY_OK 0x0001 /* Suits me */
#define NOTIFY_STOP_MASK 0x8000 /* Don't call further */
#define NOTIFY_BAD (NOTIFY_STOP_MASK|0x0002) /* Bad/Veto action */


参考文章:

阅读(2854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~