[問題] linux kernal: container_of 運作原理

看板C_and_CPP作者 (carl)時間11年前 (2013/02/27 15:37), 編輯推噓6(607)
留言13則, 7人參與, 最新討論串1/1
想請問一下 我在下邊這個連結看到Linux linked list的實作 http://rdc.taobao.com/blog/cs/?p=1675 但是下面這行 struct user_t* next = container_of(&(g_user_list.next->node), struct user_t, node); 我不太懂為什麼next可以指到node 是有什麼其他小技巧之類的嗎?? -- http://blog.carlcarl.tw -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.184.171

02/27 15:49, , 1F
關鍵應該是 container_of, google 資料非常多
02/27 15:49, 1F

02/27 18:42, , 2F
compound statement in parentheses 文法錯誤,GCC 才能用
02/27 18:42, 2F

02/27 23:37, , 3F
淘寶那篇文章下面有篇 ibm 的鏈表分析連結,裡面有個函數
02/27 23:37, 3F

02/27 23:39, , 4F
list_entry 應該就是淘寶那篇用 g_user_list 想做的事
02/27 23:39, 4F

02/27 23:39, , 5F
02/27 23:39, 5F

02/27 23:53, , 6F
好像是知道結構中某個欄位的位址,你可以得出結構的開頭位址
02/27 23:53, 6F

02/28 21:29, , 7F
這是kernel的東西,你先搞懂container_of這個macro吧
02/28 21:29, 7F

02/28 23:18, , 8F
就知道資料的結構, 然後位置做了減法的運算, 就算出來啦
02/28 23:18, 8F

03/01 01:36, , 9F
我知道它整個的作法 我只是覺得next可以指到node很奇怪
03/01 01:36, 9F

03/01 06:27, , 10F
筆誤吧。如果還有疑問請去問該篇原作者。
03/01 06:27, 10F

03/01 06:58, , 11F
其實你編譯看看就知道文法對不對了
03/01 06:58, 11F

03/01 07:03, , 12F

03/02 03:18, , 13F
了解 感謝!!
03/02 03:18, 13F
文章代碼(AID): #1HBRUS0S (C_and_CPP)