#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的作用就是循环遍历每个po...
list_entry((head)->next, typeof(*pos), member)返回(head)->next物理指针所处位置向前减去offsetof()个字节数据之后, 其父变量pos的物理地址,父变量的类型在编译时由typeof(*pos)自动返回.所以list_for_each_entry遍历head 下面挂接的类型为typeof(*pos)的childs结构体们,当然每个child结构体包含struct list...
Linux代码看的比较多了,经常会遇到container_of和list_for_each_entry,特别是 list_for_each_entry比较多,因为Linux经常用到链表,虽然知道这些函数的大概意思,但一旦出现一个类似的函数比如 list_for_each_entry_safe就又会感到头大,所以下定决心分析总结一下这些函数的用法,以后再看到这些面孔的时候也会轻松很多,...
list_entry((head)->next, typeof(*pos), member)返回(head)->next物理指针所处位置向前减去offsetof()个字节数据之后, 其父变量pos的物理地址,父变量的类型在编译时由typeof(*pos)自动返回. 所以list_for_each_entry遍历head下面挂接的类型为typeof(*pos)的childs结构体们,当然每个child结构体包含struct list...
那么如何通过遍历一个结构体list呢。因为实际的list,只是结构体中某个变量的list,需要通过该变量地址,计算得出结构体的地址,这样遍历了变量的时候,也就遍历了结构体。这就是list_for_each_entry所作的。 list_for_each_entry 循环list对应的entry #define list_for_each_entry(pos, head, member) \ ...
1>function:这个函数是如果pos非空,那么pos的值就为其本身,如果pos为空,那么就从链表头强制扩展一个虚pos指针,这个宏定义是为了在list_for_entry...list_for_each_entry_safe中用于临时存储post的下一个指针 member: 该数据项类型定义中list_head成员的变量名 六.内核链表的应用 分析了内核链表就要对其进行...
下面通过一个具体的示例来说明`list_for_each_entry`宏的使用方法。 假设有一个定义如下的结构体`node`: structnode{ intdata; structlist_headlist; }; 其中`list`是一个双向链表的节点。 现有一个双向链表`my_list`,其中存储了多个`node`结构体的实例。我们希望遍历该链表,并打印每个节点的`data`值。
二、list_for_each_entry: 在Linux内核源码中,经常要对链表进行操作,其中一个很重要的宏是list_for_each_entry: 意思大体如下: 假设只有两个结点,则第一个member代表head, list_for_each_entry的作用就是循环遍历每一个pos中的member子项。 图1: pos: pos: ...
本篇文章将详细介绍`list_for_each_entry`的用法。 一、函数定义和声明 `list_for_each_entry`函数是C标准库中的一个函数,它用于遍历链表中的元素。该函数的声明如下: ```c void list_for_each_entry(void* anchor, void* ptr, void* container, struct list_head* list) ``` 其中,`anchor`参数是链表...
这里主要说明rt_list_for_each_entry宏的用法,因为每次就这里不太好理解,这个宏实现的功能类似C++中用引用遍历链表,很好用的。而且RTT已经给实现了这种遍历方法如果不用总感觉自己亏了点啥 先看一下代码里此宏的具体定义: /** rt_list_for_each_entry - iterate over list of given type @pos: the type *...