内核list.h在用户态使用举例
来源:互联网 发布:golang chan 编辑:程序博客网 时间:2024/03/28 17:31
1. list的定义
struct list_head
{ struct list_head *next, *prev;};#define LIST_HEAD_INIT(name) { &(name), &(name) }#define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INIT(name)static inline void INIT_LIST_HEAD(struct list_head *list){ list->next = list; list->prev = list;}2.引用方法
在结构体重包含struct list_head,该结构体可位于任何字段,一个结构体中可以包含多个struct list_head.
struct mylist{ void *data; struct list_head use; struct list_head free;};
3. 根据list变量获取结构体
#define list_entry(ptr, type, member) \ container_of(ptr, type, member)#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)#define container_of(ptr, type, member) ({\ const typeof( ((type *)0)->member ) *__mptr = (ptr);\ (type *)( (char *)__mptr - offsetof(type,member) );})
例如,struct list_item结构如下
struct list_item{ void *data; struct list_head list;};struct list_head *pos;struct list_item *p = list_entry(pos, struct list_item, list);p即为结构体指针。
4. 操作举例
struct list_item{ int id; struct list_head list;};int main(){ struct list_item *tmp; struct list_head *pos, *p; int i; //定义成员 struct list_item mylist; //初始化链表 INIT_LIST_HEAD(&mylist.list); for(int i = 0; i < 5; i++) { tmp = (list_item*)malloc(sizeof(struct list_item)); tmp->id = i; list_add(&tmp->list, &mylist->list); } //遍历 list_for_each(pos, &mylist.list) { tmp = list_entry(pos, struct list_item, list); printf("id = %d\n",tmp->id); }}
0 0
- 内核list.h在用户态使用举例
- 在用户程序中使用linux内核list(zz)
- 在用户程序中使用linux内核list(原创)
- list.h在用户态下的应用
- linux内核list.h
- linux内核list.h
- 在用户空间编程使用linux内核链表list,hlist宏定义和操作
- 在用户空间编程使用linux内核链表list,hlist宏定义和操作
- 在用户空间编程使用linux内核链表list,hlist宏定义和操作
- 内核循环缓冲区数据结构kfifo在用户态的使用
- linux 内核之 list.h
- 内核链表list.h
- 在内核窥视用户态
- 在内核窥视用户态
- 内核链表使用举例
- 用户空间使用linux内核链表list编程
- list.h使用实例
- list.h分析使用
- 数据库的相关操作
- linux VM中复制虚拟机后eth0变成eth1
- java入门第三天 switch case 运算符 小游戏准备
- [PAT (Advanced Level) ]1031.Hello World for U 解题文档
- Android adb.exe程序启动不起来,如何处理
- 内核list.h在用户态使用举例
- javaweb学习笔记之关于分层结构的初步理解
- webrtc windows api音频采集总结
- X86-64寄存器和栈帧
- Android中解析html网页
- 堆、栈面面观
- Android 学习之Android四大组件(一)——Activity
- 黑马程序员——重点:自己不太懂的小题
- GIT@OSC源码分析之发现界面(2)