linux kernel list_head vs包含list_head的空条目

时间:2015-07-07 07:43:31

标签: c linux linux-kernel kernel linux-device-driver

我试图理解这个列表是如何工作的,通过查看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? 这怎么可能?

1 个答案:

答案 0 :(得分:1)

  

所以在for的结尾,我应该期待&entry->list == &Global.entries_list

  

这怎么可能?

上述条件意味着entry fake :它不是列表中的元素,而只是一个满足给定条件的原始指针。