Linux 内核链表
概述
Linux 内核提供了一个经典通用的双向循环链表 list 的实现,任何模块都可以借助该接口实现自己的内部循环链表。因为是通用的,可以直接移植到用户态中使用,下面介绍相关的接口与一个简单操作例子,包括链表的插入、查询、修改和删除操作。想深入了解的话直接阅读内核list源代码,代码不是很多,只有 list.h 和 types.h。内核源码可以直接下载也可以使用下文给出的链接。
内核定义了链表的结构体,任何链表的实现只要在相关结构体中包含下面这个结构体就可以使用。
struct list_head {
struct list_head *next, *prev;
};
链表组织
内核链表一般就是在一个结构体有一个结构体成员变量,该结构体成员变量只有 next 和 prev两个指针,分别指向下一个结点和上一个结构,就像一条绳子串起所有的结构体,这样做的好处,就是可以用内核链表来串起各个不同类型的结构体。
