2012-04-30 6 views
0

sched.hファイル内のstruct task_structにフィールドを追加するにはどうすればいいですか?フィールドは特別な非プリミティブノードを持つリンクリストで構成されていますか?Linuxカーネルのtask_structに複雑なリストを追加する

struct Node{ 
int counter; 
char* buffer; 
int sum; 
} 

というように、と私はそのようなノードのリストを追加したい:

は私がこのような構造を持っていると言いますか?私は

struct Node{ 
int counter; 
char* buffer; 
int sum; 
Node* next; 
} 

でリストを再実装する必要はありませんが、私は私の実装一般的なカーネルのリストではなく構造体LIST_HEADを使用します。しかし、task_structに構造体list_headを追加すると、task_structの別のインスタンスが得られますが、私の特定のフィールドに特別なリストを追加したいのです。 C++の面では

は、私は、ファイルscehd.hが、私はそれを行うにはどうすればよいと私は、その後どのように私のノードを初期化しないでくださいどのように

struct task_struct { 
. 
. 
. 
List<Node> myList; 
. 
. 
} 

ようになりますので、struct_taskにリストを追加したいですINIT_TASKマクロ?

答えて

1

あなたは「task_structにstruct list_headを追加するだけで、もう一つのtask_structのインスタンスが得られます。私があなたを誤解していない限り、それは真実ではありません。

struct list_headtask_structに追加するだけで何よりも何より少なく、task_structであなたにstruct list_headを与えます。 list_headの用途を決めるのはあなた次第です。 task_structは、あなたは空のリストであることをnode_listを初期化作成されると

struct task_struct { 
    ... 
    struct list_head node_list; 
}; 

struct your_node { 
    struct list_head list; 
    int counter; 
    char* buffer; 
    int sum; 
}; 

あなたが考えているものを実装するには、次のようなものが必要でしょう。あなたがyour_nodeのインスタンスを作成するときも、同様にして、その後でnode_listにそれを追加します:リアルたとえば

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

task_structperf_event_list、およびkernel/events/core.cでそれを反復処理のコードを参照してください。

関連する問題