Xog*_*goX 1 linked-list linux-kernel
我有一个类似的结构
struct my_struct {
struct list_head queues[NB_QUEUES];
};
Run Code Online (Sandbox Code Playgroud)
我想访问其中一个队列的第一个元素(索引是计算的,但我拿2个例子,这是<NB_QUEUES),如下所示(没有数组工作)
struct list_head t = list_first_entry(&foo->queues[2], struct my_struct, ???);
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能在索引2处获取队列的第一个元素?我没有找到任何编译的东西
所以,你的代码不是很清楚.我们来谈谈一个更通用的例子:
我有NB_QUEUES队列.我只是将它们存储为全局变量:
struct list_head queues[NB_QUEUES];
Run Code Online (Sandbox Code Playgroud)我们要确保我们的列表已初始化.我们可以静态地LIST_HEAD_INIT或在运行时使用INIT_LIST_HEAD.
int i;
for (i=0; i<NB_QUEUES; ++i)
INIT_LIST_HEAD(&queues[i]);
Run Code Online (Sandbox Code Playgroud)然后我们可以将类型元素的对象推送到以下队列之一:
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]);
Run Code Online (Sandbox Code Playgroud)之后,我们可以访问列表中的第一个元素.
struct element *q = list_first_entry(&queues[2], struct element, list);
Run Code Online (Sandbox Code Playgroud)
该list参数是从成员的名字struct element,当我们插入这个对象到链表我们使用.