the entry is* in an undefined state.*/staticinlinevoid__list_del_entry(structlist_head*entry){if(!__list_del_entry_valid(entry))return;__list_del(entry->prev,entry->next);}
1.struct list_head { 2. struct list_head *next, *prev; 3.}; list_head很简单,其实就是一个双向链表,但是我们也许会奇怪,这样的双向链表能干什么,它里面连最起码的一个泛化指针(void*)都没有,也就是说我们不可能通过它来获得其他对象的引用,那有什么用呢?也许,让我们来定义list_head,我们也许会这样定...
Linux中的list_entry和container_of 转自http://hi.baidu.com/mynana/blog/item/1da1ba99239ceb006f068c48.html list_entry宏是用来根据list_head指针查找链表所嵌入的结构体的地址,具体实现是依赖宏container_of: #define list_entry(ptr, type, member)container_of(ptr, type, member) container_of的定义...
staticinlinevoid__list_del(structlist_head*prev,structlist_head*next) { next->prev=prev; prev->next=next; } staticinlinevoid__list_del_entry(structlist_head*entry) { __list_del(entry->prev,entry->next); } staticinlinevoidlist_del(structlist_head*entry) { __list_del(entry->prev,entr...
list_entry - 例子 如果我们有test_list结构: struct test_list{ int testdata; struct list_head list;}; struct test_list a; a.testdata = 5; struct test_list *pos = list_entry(&(a.testdata),struct test_list,testdata); 结果:
INIT_LIST_HEAD(&iic_data_head->list_node); 二. 添加节点 内核已经提供了添加节点的接口了 1. list_add 如下所示。 根据注释可知,是在链表头head后方插入一个新节点new。 1. /** 2. * list_add - add a new entry 3. * @new: new entry to be added ...
typedefstructpage{structlist_headlist;//...structpage*next_hash;//...structlist_headlru; }; 数据结构之间的连接操作都通过list_head执行。 接着内核定义了如下的一个函数: memlist_entry(cur, struct page, list); 这个函数将list_head的指针curr换算成了宿主结构的其实地址,也就是其宿主page结构的指针...
struct list_head list;}; struct test_list a; a.testdata = 5; struct test_list *pos = list_entry(&(a.testdata),struct test_list,testdata); 结果: pos = &a; 可测试: pos->testdata = 5 list_entry - 解释 &((type *)0)->member: ...
* Insert a new entry after the specified head. * This is good for implementing stacks. */ static inline void list_add(struct list_head *new, struct list_head *head) { __list_add(new, head, head->next); } /** * list_add_tail - add a new entry ...
linux中的list,目录队列的操作,相关函数宏、函数分析定义、初始化list_head的方法list_entry(ptr,type,member)list_for_each_entry(pos,head,member)队列的操作,相关