m********o 发帖数: 796 | 1 【 以下文字转载自 Linux 讨论区 】
发信人: momoxinduo (馍馍), 信区: Linux
标 题: 弱弱的问个内核遍历当前进程的子进程的一小段程序
发信站: BBS 未名空间站 (Wed Aug 21 01:23:39 2013, 美东)
linux内核里遍历当前进程的子进程的一小段程序有点看不太明白
struct task_struct *task;
struct list_head *list;
/* 这里的 struct list_head 的定义是两个指向他自己的指针
* struct list_head
* {
* struct list_head *next, *prev;
* }; */
/* 下面的list_for_each宏定义
*list_for_each - iterate over a list
* @pos: the &struct list_head to use as a loop cursor.
* @head: the head for your list. */
#define list_for_each(pos, head)
for (pos = (head)->next; prefetch(pos->next), pos != (head); pos =
pos->next) */
/* 这里的children也是struct list_head children;*/
list_for_each(list, ¤t->children)
{
task = list_entry(list, struct task_struct, sibling);
/* task now points to one of current’s children */
}
哪位大大能解释一下list_for_each怎么工作的?list_for_each(list, ¤t->
children), 这里的list和children都是 struct list_head类型,按照list_for_each
定义,把children的next指针(单个指针)赋给list(包含两个指针)? | n******t 发帖数: 4406 | 2 这就是标准的list 遍历,有什么问题么?无非写成了宏省事而已。
【在 m********o 的大作中提到】 : 【 以下文字转载自 Linux 讨论区 】 : 发信人: momoxinduo (馍馍), 信区: Linux : 标 题: 弱弱的问个内核遍历当前进程的子进程的一小段程序 : 发信站: BBS 未名空间站 (Wed Aug 21 01:23:39 2013, 美东) : linux内核里遍历当前进程的子进程的一小段程序有点看不太明白 : struct task_struct *task; : struct list_head *list; : /* 这里的 struct list_head 的定义是两个指向他自己的指针 : * struct list_head : * {
| k**********g 发帖数: 989 | 3
Bi-directional circular linked list.
【在 m********o 的大作中提到】 : 【 以下文字转载自 Linux 讨论区 】 : 发信人: momoxinduo (馍馍), 信区: Linux : 标 题: 弱弱的问个内核遍历当前进程的子进程的一小段程序 : 发信站: BBS 未名空间站 (Wed Aug 21 01:23:39 2013, 美东) : linux内核里遍历当前进程的子进程的一小段程序有点看不太明白 : struct task_struct *task; : struct list_head *list; : /* 这里的 struct list_head 的定义是两个指向他自己的指针 : * struct list_head : * {
| k**********g 发帖数: 989 | 4
这里 list 的名字取得不好。在循环里面,list 的值是改变的,就正如 for (index
= 0; index < 10; ++index) 里面 index 的值改变一样。用C++的说法,list 就是
iterator 或是 pointer to item。
但循环结束後,循环链表的指针回到起点,因此 list 的结束值和它的开始值一样。
【在 m********o 的大作中提到】 : 【 以下文字转载自 Linux 讨论区 】 : 发信人: momoxinduo (馍馍), 信区: Linux : 标 题: 弱弱的问个内核遍历当前进程的子进程的一小段程序 : 发信站: BBS 未名空间站 (Wed Aug 21 01:23:39 2013, 美东) : linux内核里遍历当前进程的子进程的一小段程序有点看不太明白 : struct task_struct *task; : struct list_head *list; : /* 这里的 struct list_head 的定义是两个指向他自己的指针 : * struct list_head : * {
|
|