list_first_entry链表数组linux内核
list_first_entry array of linked list linux kernel
我有一个像
这样的结构
struct my_struct {
struct list_head queues[NB_QUEUES];
};
我想访问其中一个队列的第一个元素(索引已计算,但我以 2 为例,它是 < NB_QUEUES),如下所示(无需数组即可工作)
struct list_head t = list_first_entry(&foo->queues[2], struct my_struct, ???);
我应该怎么做才能在索引 2 处获取队列的第一个元素?我没有找到任何可以编译的东西
所以,你的代码不是很清楚。让我们来谈谈一个更通用的例子:
我有 NB_QUEUES 个队列。我只是将它们存储为全局变量:
struct list_head queues[NB_QUEUES];
我们需要确保我们的列表已初始化。我们可以用 LIST_HEAD_INIT
静态地做到这一点,或者在运行时用 INIT_LIST_HEAD
.
int i;
for (i=0; i<NB_QUEUES; ++i)
INIT_LIST_HEAD(&queues[i]);
然后我们可以将元素类型的对象推入这些队列之一:
struct element {
struct list_head list;
int data;
float more_data;
};
struct element *v = kmalloc(sizeof(*v), GFP_KERNEL);
v->data = 4;
v->more_data = 7.2;
list_add(&v.list, &queues[2]);
稍后,我们可以访问列表中的第一个元素。
struct element *q = list_first_entry(&queues[2], struct element, list);
参数list
来自struct element
的成员名,我们在插入这个对象到链表时使用的
我有一个像
这样的结构struct my_struct {
struct list_head queues[NB_QUEUES];
};
我想访问其中一个队列的第一个元素(索引已计算,但我以 2 为例,它是 < NB_QUEUES),如下所示(无需数组即可工作)
struct list_head t = list_first_entry(&foo->queues[2], struct my_struct, ???);
我应该怎么做才能在索引 2 处获取队列的第一个元素?我没有找到任何可以编译的东西
所以,你的代码不是很清楚。让我们来谈谈一个更通用的例子:
我有 NB_QUEUES 个队列。我只是将它们存储为全局变量:
struct list_head queues[NB_QUEUES];
我们需要确保我们的列表已初始化。我们可以用
LIST_HEAD_INIT
静态地做到这一点,或者在运行时用INIT_LIST_HEAD
.int i; for (i=0; i<NB_QUEUES; ++i) INIT_LIST_HEAD(&queues[i]);
然后我们可以将元素类型的对象推入这些队列之一:
struct element { struct list_head list; int data; float more_data; }; struct element *v = kmalloc(sizeof(*v), GFP_KERNEL); v->data = 4; v->more_data = 7.2; list_add(&v.list, &queues[2]);
稍后,我们可以访问列表中的第一个元素。
struct element *q = list_first_entry(&queues[2], struct element, list);
参数
list
来自struct element
的成员名,我们在插入这个对象到链表时使用的