没有数据和自我参考指针的链接列表


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中找到它们的实现。

最新更新