0

如何在 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 宏中初始化我的节点?

4

1 回答 1

1

您说“将 struct list_head 添加到 task_struct 只是给了我另一个 task_struct 实例”。这不是真的,除非我误解了你。

将 a 添加struct list_headtask_structjust 中会为您提供 a ,仅struct list_headtask_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_listwith:

list_add_tail(&your_node->list, &your_task->node_list);

有关真实示例,请参见perf_event_list中的task_struct,以及在 中对其进行迭代的代码kernel/events/core.c

于 2012-05-01T03:48:20.183 回答