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