如何在sched.h文件中的struct task_struct中添加一个字段,该字段由一个带有特殊非原始节点的链表组成?
说我有这个结构:
struct Node{
int counter;
char* buffer;
int sum;
}
依此类推,我想添加一个这样的节点列表?我不想用
重新实现列表struct Node{
int counter;
char* buffer;
int sum;
Node* next;
}
但我想使用struct list_head和通用内核列表而不是我的实现。但是将struct list_head添加到task_struct只是给了我另一个task_struct实例,而我想用我的特定字段添加我的特殊列表。
就C ++而言,我想将List添加到struct_task中,因此文件scehd.h看起来像
struct task_struct {
.
.
.
List<Node> myList;
.
.
}
我该怎么做?如何在INIT_TASK宏中初始化我的节点?
答案 0 :(得分:1)
你说“将struct list_head添加到task_struct只是给了我另一个task_struct实例”。哪不是真的,除非我误解了你。
向struct list_head
添加task_struct
只会在struct list_head
中为您提供task_struct
,仅此而已。由您来决定使用list_head
的内容。
要实现您的想法,您需要以下内容:
struct task_struct {
...
struct list_head node_list;
};
struct your_node {
struct list_head list;
int counter;
char* buffer;
int sum;
};
创建task_struct
后,您将node_list
初始化为空列表。当您创建your_node
的实例时,您也会这样做,然后将其添加到node_list
:
list_add_tail(&your_node->list, &your_task->node_list);
有关真实示例,请参阅perf_event_list
中的task_struct
,以及kernel/events/core.c
中迭代它的代码。