#define list_for_each_entry(pos, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member); \
&pos->member != (head); \
pos = list_entry(pos->member.next, typeof(*pos), member))
list_for_each_entry()它實際上是乙個 for 迴圈,利用傳入的 pos 作為迴圈變數,從表頭 head 開始,逐項向後(next 方向)移動 pos,直至又回head.
我們將for迴圈分解為一下三點:
1) for迴圈初始化 pos = list_entry((head)->next, typeof(*pos), member);
2) for迴圈執行條件 &pos->member != (head);
3) 每迴圈一次執行 pos = list_entry(pos->member.next, typeof(*pos), member))
/*定義*/
#define list_entry(ptr, type, member) \
container_of(ptr, type, member) /* 作用:根據乙個結構體變數中的乙個域成員變數的指標來獲取指向整個結構體變數的指標。 */
* member 為成員變數
* ptr 為接收指標
* type 為結構體型別
看乙個例子吧:
list_for_each_entry(sd, &v4l2_dev->subdevs, list)
上面這個例子,其實是遍歷v4l2_dev->subdevs(為list_head型別,乙個雙向鍊錶),然後把v4l2_dev->subdevs所在的結構體變數的指標賦值給sd,
然後在迴圈中對sd進行操作
呼叫list_add可以將乙個新鍊錶結點插入到乙個已知結點的後面;
呼叫list_add_tail可以將乙個新鍊錶結點插入到乙個已知結點的前面;
持續更新中...
linux kernel操作GPIO函式
include int gpio request unsigned gpio,const char label 功能 申請乙個gpio 引數 gpio 管腳號 label 管腳名,可以為空 null 返回值 成功返回0,失敗返回錯誤碼 int gpio direction output unsign...
linux kernel 獲取時間函式api
核心態常用獲取納秒的函式。u64是unsigned long long型別的資料型別,列印用 llu。基本的基於時間的介面 ktime t ktime get void 用於可靠的時間戳和精確測量短時間間隔。在系統啟動時啟動,但在掛起期間停止 ktime tktime get boottime vo...
Linux kernel 關於keyboard部分
linux kernel 關於keyboard部分 keyboard.c 用於處理和鍵盤相關的input handler。其中包括後續的鍵碼轉換和輸出 atkbd.c 常用的鍵盤布局,用於獲得掃瞄碼,並將其傳送到input handler 鍊錶中 struct input handler kbd h...