比较:1.list_for_each和list_for_each_entry都是遍历链表的两个宏,本质上都是for循环。2.他们做的事情本质上都一样,A.获取链表头,B.判断链表项是不是链表头,C.指向链表的下一项。3.他们的区别:list_for_each遍历的链表,其链表项不属于某个结构体。或者
} 当中用到了函数list_entry(): 这个函数的作用在图1中表示就是能够通过已知的指向member子项的指针,获得整个结构体的指针(地址) #define list_entry(ptr, type, member) \ container_of(ptr, type, member) 二、list_for_each_entry: 在Linux内核源代码中,常常要对链表进行操作。当中一个非常重要的宏是li...
#define list_entry(ptr, type, member) \ container_of(ptr, type, member) 二、list_for_each_entry: 在Linux内核源码中,经常要对链表进行操作,其中一个很重要的宏是list_for_each_entry: 意思大体如下: 假设只有两个结点,则第一个member代表head, list_for_each_entry的作用就是循环遍历每一个pos中的me...
list_entry((head)->next, typeof(*pos), member)返回(head)->next物理指针所处位置向前减去offsetof()个字节数据之后, 其父变量pos的物理地址,父变量的类型在编译时由typeof(*pos)自动返回. 所以list_for_each_entry遍历head 下面挂接的类型为typeof(*pos)的childs结构体们,当然每个child结构体包含struct li...
list_for_each_entry 原文链接:http://bbs.chinaunix.net/thread-1981115-1-1.html在Linux内核源码中,经常要对链表进行操作,其中一个很重要的宏是list_for_each_entry:意思大体如下:假设只有两个结点,则第一个member代表head,list_for_each_entry的作用就是循环遍历每一个pos中的member子项。图1: #define html...
1>function:这个函数是如果pos非空,那么pos的值就为其本身,如果pos为空,那么就从链表头强制扩展一个虚pos指针,这个宏定义是为了在list_for_entry...list_for_each_entry_safe中用于临时存储post的下一个指针 member: 该数据项类型定义中list_head成员的变量名 六.内核链表的应用 分析了内核链表就要对其进行...
listentry详解memberoffsetofstruct list_for_each与list_for_each_entry详解一、list_for_each1.list_for_each原型#definelist_for_each(pos,head)\for(pos=(head)->next,prefetch(pos->next);pos!=(head);\pos=pos->next,prefetch(pos->next))它实际上是一个for循环,利用传入的pos作为循环变量,从表头head...
list_entry((ptr)->next, type, member) 结合例子,即相当于 list_entry((&father->children)->next, type, member),所以 for 循环的初始化即为: pos = list_entry((&father->children)->next, type, member) 3.2 list_entry(ptr, type, member) ...
1.#define list_entry(ptr, type, member) \ 2. container_of(ptr, type, member) 其实list_entry就是直接使用了container_of,那我们就得看看container_of 了,具体在linux/kernel.h里定义。关于它的详细理解请参考http://www./Linux/2012-02/53701.htm。
对应到这里的宏,第一条初始化语句为pos = rt_list_entry((head)->next, typeof(*pos), member);,是一个对pos的赋值语句,所以这里结合代码和上面的注释就能很容易知道第一个参数pos就类似普通for循环的循环变量。初始化又用到了另外一个宏rt_list_entry,此宏相关的代码如下: ...