[英]Understanding struct task list_head
我有一个结构my_struct
我找到了一个指南,说有一个非常容易使用的链表,我要做的就是在结构中包含一个task list_head
,但是我不知道如何正确遍历此列表,因为我不知道列表的实际结构
[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;
}
有人可以解释此链接列表的实际工作方式吗?
在您的代码中,您包括了“ module.h”; 这是大多数Linux内核模块的标准包含模块。 “ module.h”文件包括“ list.h”。
(这些包含标头可以在/ usr / src / linux /下找到)
-
“ list.h”内核头文件定义了Linux内核的(仅可接受的)链表实现(根据kernel.org的说法)。 在tern中,“ list.h”包括“ types.h”,它们定义了以下内容:
struct list_head {
struct list_head *next, *prev;
}
在提供给您的问题的代码中:
struct task list_head;
“结构任务”包含一个“结构list_head”元素。 然后再:
list_for_each()
在“ list.h”中定义,需要使用“ pos”和“ head”来迭代列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.