当前位置: 首页 > news >正文

邯郸媒体网络营销诚信合作/seo站长平台

邯郸媒体网络营销诚信合作,seo站长平台,武汉网站建设027best,php做网站技术概述 Linux内核中各个子系统相互依赖,当其中某个子系统状态发生改变时,就必须使用一定的机制告知使用其服务的其他子系统,以便其他子系统采取相应的措施。为满足这样的需求,内核实现了事件通知链机制(notification ch…

概述

Linux内核中各个子系统相互依赖,当其中某个子系统状态发生改变时,就必须使用一定的机制告知使用其服务的其他子系统,以便其他子系统采取相应的措施。为满足这样的需求,内核实现了事件通知链机制(notification chain)。

通知链只能用在各个子系统之间,而不能在内核和用户空间进行事件的通知。组成内核的核心系统代码均位于kernel目录下,通知链表位于kernel/notifier.c中,对应的头文件为include/linux/notifier.h。

事件通知链表是一个事件处理函数的列表,每个通知链都与某个或某些事件有关,当特定的事件发生时,就调用相应的事件通知链中的回调函数,进行相应的处理。


通知链类型

原子通知链
通知链元素的回调函数(当事件发生时要执行的函数)在中断或原子操作上下文中运行,不允许阻塞。对应的链表头结构:

struct atomic_notifier_head {  spinlock_t  lock;  struct  notifier_block *head;  
};

可阻塞通知链
通知链元素的回调函数在进程上下文中运行,允许阻塞。对应的链表头:

struct  blocking_notifier_head {  struct  rw_semaphore  rwsem;  struct  notifier_block   *head;  
};

原始通知链
对通知链元素的回调函数没有任何限制,所有锁和保护机制都由调用者维护。对应的链表头:

struct  raw_notifier_head {  struct  notifier_block   *head;  
};

SRCU通知链
可阻塞通知链的一种变体。对应的链表头:

struct  srcu_notifier_head {  struct  mutex mutex;  struct  srcu_struct  srcu;  struct  notifier_block  *head;  
};

相应接口

注册通知链
在通知链表注册时,需要有一个链表头,他指向这个通知链表的第一个元素,这样就可以根据这个链表头找到这个链表中的所有数据。

static int notifier_chain_register(struct notifier_block **nl,struct notifier_block *n);
static int notifier_chain_unregister(struct notifier_block **nl,struct notifier_block *n)

通知链表
当有事件发生时,就使用notifier_call_chain向某个通知链表发送消息。这个函数会遍历通知链中所有的元素,然后依次调用每一个的回调函数。

static int __kprobes notifier_call_chain(struct notifier_block **nl,unsigned long val, void *v,int nr_to_call, int *nr_calls)

实例

#include <linux/module.h>
#include <linux/notifier.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/fs.h>static RAW_NOTIFIER_HEAD(test_chain_head);
#define EVENT_A 0x01
#define EVENT_B 0x02int test_notifier_event(struct notifier_block *nb, unsigned long event, void *v)
{switch (event) {case EVENT_A:printk("test_notifier_event EVENT_A\n");break;case EVENT_B:printk("test_notifier_event EVENT_B\n");break;default:break;}return NOTIFY_DONE;
}static struct notifier_block test_notifier = {.notifier_call = test_notifier_event,
};static int __init mynotify_init(void)
{printk("raw_notifier_chain_register\n");raw_notifier_chain_register(&test_chain_head, &test_notifier);printk("raw_notifier_call_chain\n");raw_notifier_call_chain(&test_chain_head, EVENT_B, NULL);raw_notifier_call_chain(&test_chain_head, EVENT_A, NULL);return 0;
}static void __exit mynotify_exit(void)
{raw_notifier_chain_unregister(&test_chain_head, &test_notifier);
}module_init(mynotify_init);
module_exit(mynotify_exit);MODULE_AUTHOR("lei_wang");
MODULE_LICENSE("GPL");

首先要将notifier_block通过raw_notifier_chain_register注册到notifier_block_head链表上,notifier_block中必须要实现回调函数,然后在需要的时候通过raw_notifier_call_chain去调用notifier_block中的回调函数。


参考文章

  1. Linux内核基础–事件通知链(notifier chain)
http://www.lbrq.cn/news/1531099.html

相关文章:

  • 苏州 ebcart 网站开发/友情链接平台赚钱吗
  • 怎么做虚拟的网站/36优化大师下载安装
  • 网站做投票系统/二十条优化措施
  • 通辽建设公司网站/百度官网电话客服24小时
  • 做直播网站赚钱/央视新闻的新闻
  • 网站怎么做二维码/市场调研报告
  • 创建一个网站/建站工具
  • 网站建设公司做销售好不好/sem投放是什么意思
  • 湖北工程建设总承包有限公司网站/全网霸屏推广系统
  • 中国人事建设部网站/新型网络搜索引擎
  • 如何查询网站是哪家公司做的/女生读网络营销与电商直播
  • 网站设计前期沟通单/如何优化关键词的方法
  • seo是什么服/关键词快速优化排名软件
  • 如何做转发文章赚钱的网站/营销网站建设价格
  • 昆明网站制作方案/宁波seo博客
  • 本溪建网站/广州排名推广
  • yii2框架做的网站有哪些/南京百度竞价推广公司排名
  • 网站多语言建设方案/百度西安
  • 给网站做排名优化学什么好处/百度手机助手网页
  • 梦织做网站/蚂蚁链接bt链接
  • 一般建设网站的布局/模板网站建设开发
  • 网站开发的价格/创意营销案例
  • 做网站收录/广州seo优化外包服务
  • 如何做国外销售网站/营销案例分享
  • 自学网站建设好学吗/疫情二十条优化措施
  • 做网站 如何注册公司/google商店
  • 政府门户网站集群建设工程招标/软文街
  • 无基础想学室内设计/快照关键词优化
  • 霸州做网站1766534168/热点新闻最新消息
  • 台州地区网站建设/免费网站推广网站在线
  • 深入理解 hash -r:解决 Linux 命令缓存难题的关键密钥
  • uniappx与uniapp的区别
  • 利用DeepSeek编写调用系统命令用正则表达式替换文件中文本的程序
  • nginx-自制证书实现
  • 打工人项目日报计划
  • uni-app:实现文本框的自动换行