1. 在linux核心中使用了大量的鍊錶結構來組織資料,鍊錶結構的定義為:
structlist_head
;
list_head結構包含兩個只想list_head結構的指標prev和next,由此可見,核心的鍊錶具備雙鏈表的功能。實際上,通常他都組織成雙向迴圈鍊錶。
2. linux核心中提供的鍊錶操作主要有:
①init_list_head(struct list_head* head): 初始化煉表頭
static inline void init_list_head(struct list_head *list)
②list_add(struct list_head* new, struct list_head* head): 煉表頭插入(在head後插入)
③list_add_tail(struct list_head* new, struct list_head* head): 鍊錶尾插入(在head前插入)
④list_del(struct list_head* head): 刪除節點
⑤list_entry(ptr, type, member): 提取資料結構(根據成員變數member的位址ptr,返回指向結構體type的指標)
⑥list_for_each(struct list_head* pos, struct list_head* head): 遍歷鍊錶
#define list_for_each(pos, head) \for (pos = (head)->next; prefetch(pos->next), pos !=(head); \
pos = pos->next)
3.簡單例項:
#include #includetypedef
struct
_listtest
listtest;
module_license(
"gpl");
module_author(
"kevin");
module_version(
"v1.0");
module_description(
"print hello world");
struct
list_head header;
static
int listinit(void
) list_add_tail(&(listtest[0].head), &header);
list_add_tail(&(listtest[1].head), &header);
list_add_tail(&(listtest[2].head), &header);
list_add_tail(&(listtest[3].head), &header);
list_add_tail(&(listtest[4].head), &header);
list_for_each(pnode, &header)
}list_del(&header);
return
0;
}static
void listexit(void
)module_init(listinit);
module_exit(listexit);
linux核心鍊錶
鍊錶是一種常用的資料結構,它通過指標將一系列資料節點連線成一條資料鏈。相對於陣列,鍊錶具有更好的動態性,建立鍊錶時無需預先知道資料總量,可以隨機分配空間,可以高效地在鍊錶中的任意位置實時插入或刪除資料。鍊錶的開銷主要是訪問的順序性和組織鏈的空間損失。一 鍊錶結構 單鏈表結構如下 雙鏈表結構如圖 st...
linux核心鍊錶
include include struct list head struct mylist void list add struct list head new,struct list head prev,struct list head next void list add tail struc...
Linux核心鍊錶
核心鍊錶 核心鍊錶即,我麼在乙個鍊錶中插入或刪除乙個資料,都需要自己編寫 相當的麻煩,怎麼解決這個問題呢,為了更加方便的解決這個問題,linux中就產生了核心鍊錶,以後想要在鍊錶中插入資料或刪除資料時,只需要呼叫函式就可以了。鍊錶對比 鍊錶是一種資料結構,他通過指標將一系列的資料節點連線成一條資料鏈...