Linux Notifier机制

2840阅读 0评论2013-03-14 xiaoqiang_linux
分类:LINUX

最近修改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 */


参考文章:

上一篇:Linux dynamic debug feature
下一篇:ssh连接远程问题