在linux内核中经常会看到这几个结构体:
struct list_head;
struct hlist_head;
struct hlist_node;
在linux内核源代码中对这三个结构体的定义如下:
struct list_head
{
struct list_head *prev;
struct list_head *next;
}
struct hlist_node
{
struct hlist_node **prev;
struct hlist_node *next;
}
struct hlist_head
{
struct hlist_node *first;
}
这三个结构体在内核中的作用:
struct list_head 用于在内核中构建双链表。在进程的进程描述符struct task_struct 中就包含了这个结构体,用于将内核中的进程描述符组成进程链表来管理系统中的所用的进程。
struct hlist_head 和 struct hlist_node 用于构建内核中的散列表;有这两个这两个结构体的名字可以知道,struct hlist_head 是用于指向散列表的头部,而struct hlist_node是散列表数组中的元素,它的后面会挂在一个链表来来存放使用相同的hash index的进程描述符的。