簡體   English   中英

Linux內核鏈接列表

[英]Linux Kernel Linked List

我正在嘗試使用Linux內核鏈接列表實現,但無法編譯。 我正在嚴格遵循這些資源,沒有任何結果( http://www.roman10.net/linux-kernel-programminglinked-list/http://kernelnewbies.org/FAQ/LinkedLists

LIST_HEAD_INIT的list.h內核宏如下:

#define LIST_HEAD_INIT(name) { &(name), &(name) }


struct Node {
int data;
struct list_head list;
};

struct Node mylinkedlist;
LIST_HEAD_INIT(&mylinkedlist.list);    

void add(){
struct Node first;
first.data = 1;
first.list = LIST_HEAD_INIT(first.list);
list_add_tail(&first->list, &mylinkedlist.list);
return 0;
}

我不斷收到:“錯誤:預期的標識符或'{'之前的'{'”

你錯了。
首先,您應該LIST_HEAD(mylinkedlist) ,而不是LIST_HEAD_INITstruct Node mylinkedlist。
mylinkedlist應該是內核鏈接列表結構的獨立頭,它用於鏈接所有list_head。

其次,您應該INIT_LIST_HEAD(&first.list) ,這是動態分配的方法; 當在編譯時靜態創建結構時使用LIST_HEAD_INIT

最后,您應該list_add_tail(&first.list,&mylinkedlist)

因此完整的代碼應為:

LIST_HEAD(mylinkedlist);

void add(){
  struct Node first;
  first.data = 1;
  INIT_LIST_HEAD(&first.list);
  list_add_tail(&first.list, &mylinkedlist);
}

這段代碼對我來說很好用。
我建議您閱讀Linux Kernel Development第6章,它對此做了很好的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM