Linux核心中的位操作 ffs h,fls h

2021-08-14 07:09:45 字數 1010 閱讀 2402

今天閱讀原始碼時遇到乙個函式: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...