kernel/include/linux/types.h
.....
struct list_head {
struct list_head *next, *prev;
};
struct hlist_head {
struct hlist_node *first;
};
struct hlist_node {
struct hlist_node *next, **pprev;
};
这些包含数据的列表的目的是什么?
这些是可用于链接任何数据结构的通用列表。例如,我有一个结构
strut my_data {
type1;
type2;
...
struct list_head list;
...
typen;
};
我还有另一个列表头,
struct list_head head;
我将其初始化以引用自己
INIT_LIST_HEAD(&head);
现在我可以向其添加一个元素
list_add_tail(&my_data.list, &head);
现在链接了结构,为了使元素退回,我们可以使用list_entry
API,该API将在内部调用container_of
函数。还有其他有用的API用于循环浏览列表并执行操作,可以在kernel/include/list.h
中找到它们的实现。