內核鏈表


能不能一種鏈表中鏈接不同的類型呢,相應這種號召,內核鏈表誕生了。

內核鏈表之所以能夠鏈接不同的類型的數據,是因爲它和普通鏈表不一樣,它鏈接的不是數據結構的起始地址,而是鏈接的該數據結構中的的list_head屬性。

842584-20151124233430921-1191264818.jpg

 

下面是比較重要的函數:

842584-20151124233432827-875397475.jpg

 

 

其他的都很簡單,專門介紹一下list_entry函數:

842584-20151124233434202-1525294286.jpg

 

842584-20151124233436093-522054639.jpg

 

函數最後返回的是這個結構體節點起始地址。Ptr是這個節點中list_head屬性的地址,type是這個結構體節點的真實類型,member是這個結點中list_head屬性的名字。

其中typeof關鍵字調用 0->member而沒有出錯,個人認爲這是因爲typeof並不對表達式求值,只是利用了其類型,所以不會出錯。

 

可以使用如下方式調用:

Struct list_head * pos;

Struct student *tmp;

Tmp = list_entry(pos,struct list_head,pointer);

 

下面是一段標準使用代碼:

842584-20151124233442421-1070540223.jpg

 

 

 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章