需要澄清Robert Love在Linux内核中给出的内容

时间:2013-11-23 16:55:32

标签: process linux-kernel

我是LKD的新人,我正在读Robert Love的书。我坚持理解一个概念如下。

同样,可以使用

迭代进程的子进程
struct task_struct *task;
struct list_head *list;
list_for_each(list, &current->children) {
    task = list_entry(list, struct task_struct, sibling);
    /* task now points to one of current’s children */
}

如果有人解释list_entry参数有效,我会很高兴吗?

我很难理解上面的代码段特别list_for_each

1 个答案:

答案 0 :(得分:1)

list_for_each是一个宏defined as

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

由于C语言中的宏通过文本替换进行扩展,因此您引用的代码片段变为

for (list = (&current->children)->next; list != (&current->children); list = list->next) {
    task = list_entry(list, struct task_struct, sibling);
    /* task now points to one of current’s children */
}

此代码从节点(&current->children)->next开始循环链接列表,直到它返回(&current->children)->next