我有一个结构my_struct
我找到了一个指南,说有一个非常容易使用的链表,我需要做的就是在我的结构中包含一个task list_head
,但我不是&# 39;了解如何正确遍历此列表,因为我不知道列表的实际结构
[edit]这个内核链接列表实际上如何工作?请解释一下。
#include <linux/blkdev.h>
#include <linux/bio.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/init.h>
在内核之外尝试:
#include "list.h"
// my list of elements
struct my_struct
{
struct task list_head;
}
然后我宣布我的名单的负责人:
struct my_struct *head;
记忆是这样的头像malloc:
head = malloc(sizeof(*head));
我可以使用类似的东西;
int count_elements_in_list()
{
int size = 0;
struct my_list *pos;
list_for_each(pos, head)
{
size++;
}
return size;
}
有人可以解释这个链表实际上是如何运作的吗?
答案 0 :(得分:0)
在您的代码中,您包含了“module.h”;这是大多数Linux内核模块的标准包含模块。 “module.h”文件包含“list.h”。
(这些包括标题可以在/ usr / src / linux /下找到)
-
'list.h'内核头文件定义了Linux内核的唯一可接受的链表实现(根据kernel.org的人员)。在本文中,'list.h'包括'types.h',它定义了以下内容:
struct list_head {
struct list_head *next, *prev;
}
在提供给您问题的代码中:
struct task list_head;
'struct task'包含'struct list_head'元素。然后:
list_for_each()
在'list.h'中定义,它需要使用'pos'和'head'来迭代列表。