我遇到的问题是,我并不完全理解如何使用这个结构。例如,我看到他们有“struct list_head children”。然而,这个结构的实现只是一个“*next”和“*last”。
我已经查阅了在线示例,每个示例都说,好吧,制作一个...
struct node{
int data;
struct list_head list;
};
但是这不会表明我应该在我的task_struct中包括哪种数据结构。
struct node list;
如果我使用list_head,我不太明白如何初始化结构以包含我想要的数据。
基本上,我想添加一个系统调用的链表,并将它们作为char*(可读格式)的链表附加到进程中。
目前,获取系统调用信息的语义并不重要... 我只需要弄清楚如何让链表与task_struct一起工作。
编辑:例如我想做什么:
我已经获得了一个函数执行的系统调用列表。 我将这些保留在单独的char*变量中。 我想在进程的task_struct中添加一个列表,以跟踪所有这些系统调用。
例如
进程'abc'调用 printf 〜> 等同于“WriteScreen” getchar 〜> 等同于“ReadKey”
现在我有一个用户空间代码,其中包含这两个字符串。 我调用一个系统调用(每个标记一次),将这些系统调用与该进程进行“标记”。
在这两个调用之后,“abc”的task_struct具有列表
abc->task_struct->tag_list
此列表包含“WriteScreen”和“ReadKey”。
稍后,我将使用这些标记打印调用WriteScreen、ReadKey等进程的列表。在找到如何使用列表适当地存储附加到进程的字符串之后,将实现这些内容。
list_for_each_entry
宏(类似于for
循环遍历列表中的条目)。我将编辑答案以举例说明。 - rslemos