【发布时间】:2014-04-21 03:50:43
【问题描述】:
我有一个结构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;
}
有人能解释一下这个链表是如何工作的吗?
【问题讨论】:
-
你不能按原样遍历这个,没有什么可以遍历的,那么你的问题是如何遍历一个不存在的列表或如何构建一个链表?
-
我很确定该列表存在。我一开始就为头部分配了内存。
-
如果没有看到定义列表元素的结构,我们无法回答。
-
@user3555302,我假设有一个#included '.h' 文件描述了'for_each()'。我相信'.h'文件是理解代码的关键。
-
其实没有;目前还不清楚——根本不清楚(因为我是对评论投赞成票的人)。要创建一个链表,你需要一些指针;你没有显示指针。这就是我们感到困惑的原因。您没有向我们提供对回答您的问题至关重要的信息。
标签: c linux-kernel