从理解Linux内核开始
Linux内核定义了list_head数据结构,其唯一的字段next和prev分别表示一个通用双链接列表元素的前向和后向指针。但是,需要注意的是,list_head字段中的指针存储的是其他list_head字段()的地址,而不是包含list_head结构的整个数据结构的地址;参见图3-3 (a)。

为什么list_head字段中的指针存储其他list_head字段的地址,而不是存储包含list_head结构的整个数据结构的地址?
给定指向list_head对象的指针,如何获得包含list_head对象的数据结构(例如“数据结构1")的对象?例如,How can I get the process descriptor from a PID in Linux kernel?
如果是在面向对象语言中,那么list_head字段可能在包含list_head结构的数据结构中是私有的吗?因此,list_head字段中的指针存储包含list_head结构的整个数据结构的地址是否比其他list_head字段的地址更合理?
发布于 2018-09-17 10:31:40
为什么list_head字段中的指针存储其他list_head字段的地址,而不是存储包含list_head结构的整个数据结构的地址?
因为它在逻辑上是正确的,而且更容易实现。您不需要知道迭代列表的类型。也没有将列表头嵌入到任何结构中。当list为空时,它应该指向什么?
给定指向list_head对象的指针,如何获得包含list_head对象的数据结构(例如“数据结构1")的对象?
使用of宏。
发布于 2018-09-17 08:32:09
list_head存储指向下一个/prev列表节点的指针。一个数据结构可以使用多个list_head元素放置在多个列表中。处理代码“知道”这些元素中哪些放在给定的列表中,并且可以使用list_entry将指针从指针恢复到节点。
https://stackoverflow.com/questions/52359598
复制相似问题