内核链表使用举例

内核链表使用举例
#ifndef _EVENT_LIST_H_
#define _EVENT_LIST_H_#include "list.h" // 内核链表头文件typedef int (*event_cb)(void *data);typedef struct
{void *params;event_cb handle;struct list_head list;
} event_elem_t;int EventListAdd(event_elem_t *event, struct list_head *event_head);
int EventListDel(event_elem_t *event, struct list_head *event_head);
void EventListProcess(struct list_head *event_head, void *ret);#endif /* _EVENT_LIST_H_ */
#include "event_list_.h"
#include <stddef.h>struct list_head proto_event_list;LIST_HEAD(proto_event_list);int EventListAdd(event_elem_t *event, struct list_head *event_head)
{if(event == NULL || event->handle == NULL){return -2;}list_add(&event->list, event_head);return 0;}int EventListDel(event_elem_t *event, struct list_head *event_head)
{event_elem_t *pevent;struct list_head *pos;if(event == NULL || event->handle == NULL){return -2;}list_for_each(pos, event_head){const struct list_head *__mptr = pos;pevent = (event_elem_t *)((char *)__mptr - offsetof(event_elem_t, list) );if(pevent == event_elem_t){list_del(pos);return 0;}}return -3;//ERR;}void EventListProcess(struct list_head *event_head, void *ret)
{event_elem_t *pevent;struct list_head *pos;const struct list_head *__mptr;if(list_empty(event_head)){return;}list_for_each(pos, event_head){__mptr = pos;pevent = (event_elem_t *)((char *)__mptr - offsetof(event_elem_t, list) );*(int *)ret = pevent->event_handle(pevent->params);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CObList

CObList CObList类支持非唯一的CObject指针&#xff0c;并可顺次访问或通过指针值访问有序列表。CObList列表的行为类似于双向链接列表。CObList是非常有用的集合类族的代表&#xff0c;具有诊断转储的特性并且能够包含混合的指针。 POSITION类型的变量为列表的键。使用POSITIO…

源码包安装

一、源码包和RPM包的区别 1、区别 安装之前的区别&#xff1a;概念上的区别 安装之后的区别&#xff1a;安装位置不同 2、RPM包安装位置 是安装在默认位置中 注&#xff1a;安装位置是写RPM包的作者决定的 注&#xff1a;RPM包支持指定安装位置&#xff0c;但是不建议指定位置安…

年轻10岁简单又易行的妙方

爱美的女性&#xff0c;谁不想使自己更年轻&#xff0c;并能留住一份健康的美?我们介绍的方法非常容易实现&#xff0c;只要你能够坚持。想要年轻10岁?没有想象中那么困难,但是也要持之以恒哦!这里推荐的都是价廉易置的)鉴借&#xff0c;愿能给大家有参考之用&#xff1a;1.一…

计算最后一个单词的字符串长度

题目 http://www.nowcoder.com/questionTerminal/8c949ea5f36f422594b306a2300315da 看了大家的答案&#xff0c;觉得还是稍微复杂。给一个比骄简单的解题思路。 只要是空格&#xff0c;就把计数置0&#xff0c;要不然就一直自增。 #include "stdio.h" #include …

strstrsubstr、AfxGetApp

1.strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是&#xff0c;则该函数返回str2在str1中首次出现的地址&#xff1b;否则&#xff0c;返回NULL。 2.substr是C语言函数&#xff0c;主要功能是复制子字符串&#xff0c;要求从指定位置开始&#xff0c;并具有…

Linux下修改SSH登录端口

Linux下修改SSH登录端口LINUX 的默认SSH 端口是 22。为了防止别人暴力破解&#xff0c;建议修改SSH 访问端口&#xff1a;vim /etc/ssh/sshd_config 找到Port 22 这一行&#xff0c;这是是默认端口22&#xff0c;现在改成Port 1234这个数字自己定&#xff0c;但是不要超过65536…

五岁的时候,你在干什么?

文章写在2021.2.7号——想不到啊想不到&#xff0c;这么快你就五岁了。今天是楠哥的生日&#xff0c;在五年前的今天&#xff0c;小伙子在深圳宝安妇幼出生&#xff0c;刚出生的时候&#xff0c;样子很丑&#xff0c;第一次见面&#xff0c;我心情很紧张&#xff0c;不怎么敢靠…

GetLocalTime

GetLocalTime是一个Windows API 函数&#xff0c;用来获取当地的当前系统日期和时间。 函数原型: VOID GetLocalTime( LPSYSTEMTIME lpSystemTime //address of system times structure ); 参数说明: lpSystemTime: 指向一个用户自定义包含日期和时间信息的类型为 SYSTEMTIME 的…

Java集合(7):散列与散列码

散列的价值在于速度。我们使用数组来保存键的信息&#xff0c;这个信息并不是键本身&#xff0c;而是通过键对象生成一个数字(散列码)&#xff0c;作为数组下标。由于数组的容量是固定的&#xff0c;而散列容器的大小是可变的&#xff0c;所以不同的键可以产生相同的数组下标(散…

301转向代码合集

教育资源网将SEO工作中所需要的301转向代码进行了整理&#xff0c;收藏并分享&#xff0c;以备查阅。 1、IIS下301设置 Internet信息服务管理器 -> 虚拟目录 -> 重定向到URL&#xff0c;输入需要转向的目标URL&#xff0c;并选择“资源的永久重定向”。 2、ASP下的301转向…

TQ210——核心板和底板

TQ210——核心板和底板 1、TQ210简介【TQ210_COREB核心板 TQ210_BOARD_V4底板】 三星Cortex-A8 S5PV210芯片&#xff0c;运行最大频率1GHZ&#xff0c;处理器内部为64/32位总线结构&#xff0c;32/32KB一级缓存&#xff0c;512KB二级缓存。自带3D加速引擎&#xff08;SGX540&a…

“华为天才少年”自制百大Up奖杯,网友:技术难度不高侮辱性极强

来源&#xff1a;雷锋网B站硬核黑科技Up主、AI算法工程师稚晖君&#xff0c;停更了好一阵子后&#xff0c;这位自称野生钢铁侠的超硬核Up主终于又发布了新作品。之所以停更这么久&#xff0c;Up主解释说&#xff0c;不是因为在野外被捕了&#xff0c;纯粹是因为工作太忙了。熟悉…

CListBox的函数

CListBox::GetCurSel 函数原型&#xff1a; int GetCursel( ) const; 返回值&#xff1a; 从当前选中的项的索引为零开始。如果没有项目被当前选定或如果列表框是一个多次选择列表框&#xff0c;则返回LB_ERR。 说明&#xff1a; 从当前选中的项的索引为零开始,如果任何的,在…

终极教程,带具体实验现象,1个GPIO控制2个LED显示4种状态,欢迎讨论!

芯片之家前几天发了一篇文章&#xff0c;讨论1个GPIO控制2个LED显示4种状态&#xff0c;并没有带具体的实验现象&#xff0c;有点小遗憾&#xff1a;绝妙&#xff01;1个GPIO控制2个LED显示4种状态&#xff0c;什么&#xff1f;你不信&#xff1f;&#xff08;点击阅读&#xf…

【转载】AE表达式中英文对照

全局对象 Comp comp(name) 用另一个名字给合成命名。 Footage footage(name) 用另一个名字给脚本标志命名。 Comp thisComp 描述合成内容的表达式。例如&#xff1a;thisComp.layer(2) Layer, Light, or Camera thisLayer 是对层本身的描述&#xff0c;thisLayer是一个默认的对…

《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #15 ramzswap

HACK #15 ramzswap 本节介绍将一部分内存作为交换设备使用的ramzswap。ramzswap是将一部分内存空间作为交换设备使用的基于RAM的块设备。对要换出&#xff08;swapout&#xff09;的页面进行压缩后&#xff0c;不是写入磁盘&#xff0c;而是写入内存。可以使用的内存仅为完成压…

TQ210——底板部分原理图

TQ210——底板部分原理图 1、主电源接口&#xff08;过压过流保护&#xff09; 2、串行接口 2路5线RS232电平的DB9接口&#xff0c;4路TTLT电平扩展接口 COM1和PC之间通信需使用直连串口线 COM2和PC通信需使用交叉串口线 接口UART2可接GPRS模块实现打电话发短信功能&#xff1b…

DebugOutputString 使用

https://blog.csdn.net/wolfinrain/article/details/2444040

有趣的灵魂百里挑一,Linux同学你低下头干嘛,起来说下这个问题。

今天我们不讲源码&#xff0c;不说面试题&#xff0c;我们来说点轻松的&#xff0c;聊点好玩的&#xff0c;我们来看看linux下有哪些酷酷的&#xff0c;有意思的命令。0x00 sl - 呜呜&#xff0c;让开&#xff0c;小火车来啦0x01 cowsay - 一起来 say hello0x02 cmatrix - 超级…

北电PBX资料_LD 24 進線直撥功能設定

LD 24 進線直撥功能設定 程式提示 輸入指令符號 說 明 備 註 REQ NEW 新建 CHG 修改 OUT 刪除 END 結束 PRT 查看 TYPE DIS DISA CUST 0 第 0 客戶群 SPWD (不顯示) 輸入 1234 DN DISA 之代號(不可與其它編碼衝突) AUTR (NO)/YES NO - 系統不代輸入功能碼 YES- 撥號者可直按特權…