我是LKD的新人,我正在读Robert Love的书。我坚持理解一个概念如下。
同样,可以使用
迭代进程的子进程struct task_struct *task;
struct list_head *list;
list_for_each(list, ¤t->children) {
task = list_entry(list, struct task_struct, sibling);
/* task now points to one of current’s children */
}
如果有人解释list_entry参数有效,我会很高兴吗?
我很难理解上面的代码段特别list_for_each
。
答案 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 = (¤t->children)->next; list != (¤t->children); list = list->next) {
task = list_entry(list, struct task_struct, sibling);
/* task now points to one of current’s children */
}
此代码从节点(¤t->children)->next
开始循环链接列表,直到它返回(¤t->children)->next
。