Linux核心list head學習筆記(二)

2021-08-14 16:20:01 字數 1886 閱讀 3842

/*

注:這個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 的通用介面很容易實現 的重...