现在的位置: 首页 > 综合 > 正文

list.h头文件分析

2014年01月26日 ⁄ 综合 ⁄ 共 675字 ⁄ 字号 评论关闭

双链表的应用在内核中随处可见,list.h头文件集中定义了双链表(struct list_head结构体)的相关操作。比如这里的一个头文件中就有大量的struct
list_head型的数据。

关于list.h的分析,网上资料很多,这里只是记录我在分析list.h中遇到的问题。

0.struct list_head结构体

可能这样写,更让我们习惯:

1 struct list_head
{
2 struct list_head
*next;
3 struct list_head
*prev;
4 };

这个结构经常作为成员与其他数据类型一起组成一个新的结构体(后文若无特别提示,“新结构体”均指类似下面举例的嵌套型结构体),比如:

1 struct stu
2 {
3     char name[20];
4     int id;
5     struct list_head
list;
6 }

我们已经看到,struct list_head这个结构比较特殊,它内部没有任何数据,只是起到链接链表的作用。对于它当前所在的这个结点来说,next指向下一个结点,prev指向上一个结点。通常我们通过指向struc list_head的指针pos来获取它所在结点的地址,尽而获取其他数据。也许你现在还比较困惑这一过程,别着急,后面有特别解释。

1.链表的初始化

其实可以从后往前看,这样更容易理解。INIT_LIST_HEAD函数形成一个空链表。这个list变量一般作为头指针(非头结点)。

1 28static inline void INIT_LIST_HEAD(struct list_head
*list)
2 29{

抱歉!评论已关闭.