檔案位置:
include/linux/list.h
資料結構:
struct list_head ;
操作:list_head(name); 將
name
定義成上面的資料結構,同時
next,prev
都指向起始位置。
list_entry(ptr, type, member); 返回
list_head
的父結構體位址。其中
ptr
是所求父結構體中list_head
成員指標,type
是所求父結構體型別,member
是list_head
成員名。
list_first_entry(ptr, type, member);
獲取指定list_head
結構體成員位址指向的
next
的父結構體位址。其中
ptr
是所求結構體中list_head
成員指標,type
是所求結構體型別,member
是結構體list_head
成員名。
list_for_each(pos, head)
向下遍歷;是乙個
for(;;)
結構體,沒有結束的。使用方法
list_for_each(pos, head)
pos是乙個
list_head
變數,相當於
int i;for(i=0;i<4;i++)
中的i;
head
是乙個要遍歷的list_head
頭。
__list_for_each(pos, head)
同上,區別:沒
prefetch
操作,快。
list_for_each_prev(pos, head)
向下遍歷;
pos是乙個
list_head
變數,相當於
int i;for(i=0;i<4;i++)
中的i;
head
是乙個要遍歷的list_head
頭。
list_for_each_safe(pos, n, head)
向下遍歷,同
list_for_each,
區別:pos
可以初修改。
n也是乙個
list_head
變數list_for_each_prev_safe(pos, n, head)
向上遍歷,同
list_for_each_prev
,區別:
pos可以初修改。
n也是乙個
list_head
變數list_for_each_entry(pos, head, member)
向下遍歷list_head
的父結構。
pos是乙個list_head
變數,member
是名稱
list_for_each_entry_reverse(pos, head, member)
向上遍歷
list_head
的父結構。
list_prepare_entry(pos, head, member) 判斷
pos是有已指定,若已指定則無操作,否則將
head
的父結構位址返回。
list_for_each_entry_continue(pos, head, member)
list_for_each_entry_continue_reverse (pos, head, member)
list_for_each_entry_from(pos, head, member)
list_for_each_entry_safe(pos, n, head, member)
list_for_each_entry_safe_continue(pos, n, head, member)
list_for_each_entry_safe_from(pos, n, head, member)
list_for_each_entry_safe_reverse(pos, n, head, member)
list_add(struct list_head *new, struct list_head *head) 將
new
插在前面
list_add_tail (struct list_head *new, struct list_head *head)
將new
插在後面
list_del(struct list_head *entry)
刪除entry
結點list_replace(struct list_head *old,struct list_head *new)
替換list_replace_init (struct list_head *old,struct list_head *new)
替換初始結點
list_del_init(struct list_head *entry)
刪除並重新初始
list_move(struct list_head *list, struct list_head *head)
將list
從原列中刪除並新增到
head
頭去list_move_tail(struct list_head *list, struct list_head *head)
將list
從原列中刪除並新增到
head
尾去list_is_last(const struct list_head *list, const struct list_head *head)
判斷是否頭
int list_empty(const struct list_head *head)
判斷是否空
linux2 6驅動開發系列教程
這段時間一直在做android下的驅動,android驅動底層跟linux如出一轍,所以這裡準備做乙個專題,把linux驅動做乙個總結,為android接下來的驅動開發打好基礎,大致的思想如下 一 linux驅動基礎開發 0 linux驅動基礎開發0 linux 裝置驅動概述 1 linux驅動基礎...
Linux 2 6 驅動模板
obj m vs10xx.o vs10xx objs vs10xx.o kerneldir home kerson linux 2.6.39 pwd shell pwd modules make c kerneldir m pwd modules cp vs10xx.ko armnfs phony ...
linux2 6 裝置驅動編寫
從2.6版本開始引入了platform這個概念,在開發底層驅動程式時,首先要確認的就是裝置的資源資訊,例如裝置的位址,在2.6核心中將每個裝置的資源用結構platform device來描述,該結構體定義在kernel include linux platform device.h中,struct ...