gpt4 book ai didi

c - 删除 list.h 列表的第一个元素

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:34 35 4
gpt4 key购买 nike

(我正在使用 linux/list.h 实现一个名为 msgQueue 的队列)

typedef struct msgQueue
{
long len;
void *data;
struct list_head queue;
} msgQueue

有很多遍历列表并删除节点的示例,如下所示:

struct list_head *pos, *q;
struct msgQueue *currentQueue;

list_for_each_safe(pos, q, &(myQueue->queue))
{
currentQueue = list_entry(pos, struct msgQueue, queue);
list_del(pos);
free(currentQueue);
}

什么是只删除第一个的安全方法?

我本以为会是:

list_del(*(myQueue->queue));

但这给我带来了问题。 (内核分页请求错误)

最佳答案

myQueue->queue 是列表的头部,因此 myQueue->queue->next 是第一个条目。

假设“myQueue->queue”是一个“struct list_head”(根据评论):

if (!list_empty(myQueue->queue))
list_del(myQueue->queue.next);

似乎它会删除第一个条目。

我使用了 locate linux/list.h 并查看了 for_each 函数的宏定义。

#define list_for_each_safe(pos, n, head) \
for (pos = (head)->next, n = pos->next; pos != (head); \
pos = n, n = pos->next)

因此在循环的第一次迭代中,“pos”是 (head)->nexthead&msgQueue->queue .

关于c - 删除 list.h 列表的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19675419/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com