内核链表使用举例
2016-09-01 14:56
429 查看
内核链表使用举例
#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); } }
相关文章推荐
- Linux 内核链表使用举例
- Linux 内核链表使用举例
- Linux设备驱动工程师之路——内核链表的使用
- list_head内核链表的使用
- Linux2.6.32内核笔记(4)内核链表使用与分析
- Linux设备驱动工程师之路——内核链表的使用【转】
- 驱动中使用内核链表
- 内核链表使用--删除链表节点
- Linux 内核链表 list.h 的使用
- 20150203 【 内核链表 kernel_list.h 】 list_head 使用
- 内核链表实现分析与使用(双向环形链表)
- 内核链表实现分析与使用
- Windows内存管理(1)--分配内核内存 和 使用链表
- Windows内存管理(1)--分配内核内存 和 使用链表
- Windows内核中使用List链表来模拟FIFO操作
- Linux设备驱动工程师之路——内核链表的使用
- Windows内存管理(1)--分配内核内存 和 使用链表
- 代码片段----内核链表使用一例
- linux应用编程笔记(2)core dump分析内核链表使用后free出现的错误
- Linux设备驱动工程师之路——内核链表的使用