今天閱讀原始碼時遇到乙個函式:ffs,它時核心中實現的位操作函式,用來查詢二進位制表示數中第乙個為1的位。與ffs對應的還有fls.h,用來查詢二進位制數中最後乙個為1的位。
例如:整數32,對應的二進位制為100000,即第乙個和最後乙個為1的位是6;
整數34,對應的二進位制為100010,第乙個為1的位為2,最後乙個為1的為是6。
此處給出ffs.h的**,如下:
#ifndef _asm_generic_bitops_ffs_h_
#define _asm_generic_bitops_ffs_h_
/** * ffs - find first bit set
* @x: the word to search
* * this is defined the same way as
* the libc and compiler builtin ffs routines, therefore
* differs in spirit from the above ffz (man ffs).
*/static inline int ffs(int x)
if (!(x & 0xff))
if (!(x & 0xf))
if (!(x & 3))
if (!(x & 1))
return r;
}#endif /* _asm_generic_bitops_ffs_h_ */
實驗程式如下,執行程式時,帶上乙個整數,列印第乙個為1,和最後乙個位為1的位號。
#include "ffs.h"
#include "fls.h"
#include #include int main(int argc, char** argv)
實驗結果:
Linux核心中的seq操作
1.前言 在fs seq file.c中定義了關於seq操作的一系列順序讀取的函式,這些函式最早是在2001年就引入了,但以前核心中一直用得不多,而到了2.6核心後,許多 proc的唯讀檔案中大量使用了seq函式處理。以下核心原始碼版本為2.6.17.11。2.seq相關資料結構 2.1 seq檔案...
Linux核心中的list for each
在linux核心原始碼中,經常要對鍊錶進行操作,其中乙個很重要的巨集是list for each entry 意思大體如下 假設只有兩個結點,則第乙個member代表head,list for each entry的作用就是迴圈遍歷每乙個pos中的member子項。巨集list for each e...
Linux核心中的Namespace
linux核心中的namespace提供了乙個輕量級的基於系統呼叫層面的虛擬化解決方案。相比傳統的使用 vmware,qemu,xen,kvm,hurd的虛擬 圖1所示 基於namespace的輕量級虛擬具有易使用,易管理,無需硬體虛擬化支援,低 成本等優點。圖 1.namespace又稱conta...