我试图理解这个列表是如何工作的,通过查看list_for_each_entry的宏扩展,退出for的条件是
&pos->list_member != head
但我看到代码写得像这样并且工作正常,我不明白它为什么会起作用
struct entry {
int some_var;
struct list_head list;
};
struct global {
struct list_head entries_list;
};
struct global Global;
INIT_LIST_HEAD(&global.entries_list)
entry = kmalloc(new_entry..)
list_add_tail(&entry,&Global.entries_list);
list_for_each_entry(entry,&Global.entries_list,list) {
}
所以在for的结尾,我应该期待&entry->list == &Global.entries_list
?
这怎么可能?
答案 0 :(得分:1)
所以在for的结尾,我应该期待
&entry->list == &Global.entries_list
?
是
这怎么可能?
上述条件意味着entry
fake :它不是列表中的元素,而只是一个满足给定条件的原始指针。