我有一个结构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;
}

有人可以解释此链接列表的实际工作方式吗?

===============>>#1 票数:0

在您的代码中,您包括了“ 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”来迭代列表。

  ask by user3555302 translate from so

未解决问题?本站智能推荐: