[linux内核][LINUX内核编程]学习笔记(一)
linux內核使用bitmap相關
?1,聲明一個bitmap數組,可以表示100個bit,數組名字是bitmap
?相關宏定義如下:
[cpp]?view plaincopy
?2,使用以上定義的bitmap數組
?檢測bitmap某一位是否為1,用test_bit()函數,如檢測第一個bit,則調用test_bit(0,bitmap)
?
?使用實例:bootmem分配器~~
?
內核使用雙向鏈表相關
[cpp]?view plaincopy
?list_entry()函數可以返回包含雙向鏈表的結構,?指針ptr指向結構體type中的member成員,通過ptr返回結構體type的起始地址
?該函數向指定鏈表的head節點后插入new節點,
[cpp]?view plaincopy?pos是一個指向包含list_head節點對象的指針,可以看成是list_entry()返回的值,head是遍歷開始的位置,
?
?
[cpp]?view plaincopy第一步,首先定義一個臨時的數據類型(通過typeof( ((type *)0)->member )獲得)與ptr相同的指針變量__mptr,然后用它來保存ptr的值。第二步,用(char *)__mptr減去member在結構體中的偏移量,得到的值就是整個結構體變量的首地址(整個宏的返回值就是這個首地址)。
?
typeof的解釋如下:
?
[cpp]?view plaincopy是定義一個叫做__mptr的指針。這個指針指向的內容是不可變的,指向的類型是一個type類型結構體中member的類型。
?
?
兩個取反 !!的作用,
答:確保所得的結果為0或者1
轉載于:https://www.cnblogs.com/zhiliao112/p/4232149.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的[linux内核][LINUX内核编程]学习笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经典算法题每日演练——第十九题 双端队列
- 下一篇: Linux upstart启动方式详解