很多介绍Linux内核的书中都会对内核中使用的链表进行描述。其描述可以在include/linux/types.h中找到:

struct list_head {
    struct list_head *next, *prev;
};

和普通链表不同的是:

  1. 这个链表是作为数据存放在其他结构体中,而不是将数据存放在链表中
  2. next/prev指针指向的是下一个list_head,而普通的链表需要指向自己类型的链表节点
  3. 通过list在所在数据结构中的偏移地址来得到数据的地址,从而操作数据

具体的就不详细介绍了,总之这也是内核代码中的一个小技巧,记录一下以备不时之需。