/*
注:這個list.h 是為了配合示例程式而建的,內容來自:linux/include/linux/list.h 和相關檔案
*/
#ifndef _linux_list_h
#define _linux_list_h
struct list_head ;
#define list_head_init(name)
#define offsetof(type, member) ((size_t) &((type *)0)->member)
#define container_of(ptr, type, member) ()
static
inline
void init_list_head(struct list_head *list)
static
inline
void __list_add(struct list_head *new, struct list_head *prev,struct list_head *next)
static
inline
void list_add(struct list_head *new, struct list_head *head)
static
inline
void __list_del(struct list_head * prev, struct list_head * next)
static
inline
void list_del(struct list_head *entry)
#define prefetch(x) __builtin_prefetch(x)
//注:這裡prefetch 是gcc的乙個優化,也可以不要
#define list_for_each(pos, head) \
for (pos = (head)->next; prefetch(pos->next), pos != (head); \
pos = pos->next)
#define list_entry(ptr, type, member) \
container_of(ptr, type, member)
#endif
複製**
寫了乙個簡單的應用程式:
複製**
#include "list.h"
#include
#include
#define max_name_len 32
#define max_id_len 10
typedef
struct stud
num_n_stu;
int main(void)
list_del(&stu_1.list);
return0;}
複製**
在linux核心中可以使用這個以類似驅動模組的形式載入到核心:(這裡就不用使用自定義的list.h了)
複製**
#include
#include
#include
module_license("gpl");
#define max_name_len 32
#define max_id_len 10
typedef
struct stud
num_n_stu;
static
int my_main(void)
list_del(&stu_1.list);
return0;}
static
void my_exit(void)
module_init(my_main);
module_exit(my_exit);
Linux 核心list head 學習
在linux核心中,提供了乙個用來建立雙向迴圈鍊錶的結構 list head。雖然linux核心是用c語言寫的,但是list head的引入,使得核心資料結構也可以擁有物件導向的特性,通過使用操作list head 的通用介面很容易實現 的重用,有點類似於c 的繼承機制 希望有機會寫篇文章研究一下c...
Linux 核心list head 學習
在linux核心中,提供了乙個用來建立雙向迴圈鍊錶的結構 list head。雖然linux核心是用c語言寫的,但是list head的引入,使得核心資料結構也可以擁有物件導向的特性,通過使用操作list head 的通用介面很容易實現 的重用,有點類似於c 的繼承機制 希望有機會寫篇文章研究一下c...
Linux 核心list head 學習
linux 核心list head 學習 一 在linux 核心中,提供了乙個用來建立雙向迴圈鍊錶的結構 list head 雖然linux 核心是用 c語言寫的,但是 list head 的引入,使得核心資料結構也可以擁有物件導向的特性,通過使用操作 list head 的通用介面很容易實現 的重...