[英]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_INIT或struct 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.