linux核心中的排序介面 sort函式

2021-09-23 23:00:29 字數 2765 閱讀 8906

linux核心中的sort函式,其實跟我們所說的qsort函式很像,我們來看看qsort:

qsort 的函式原型是

void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));

引數:

1 、待排序陣列

首位址2 、陣列中待排序元素數量

3 、各元素的占用空間大小

4 、指向函式的指標

,用於確定排序的順序。

其中compare函式應寫為:

12

3

4

intcomp(constvoid*a,constvoid*b)

其實qsort是乙個典型的快速排序的介面函式。

接下來我們來看看linux核心中的排序介面函式sort:

void sort(void *base, size_t num, size_t size,

int (*cmp_func)(const void *, const void *),

void (*swap_func)(void *, void *, int size)) ;

同樣的:

1、待排序的陣列首位址

2、陣列中待排序元素的數量

3、各元素的占用空間大小

4、指向函式的指標,用於確定排序的順序。

5、指向函式的指標,用於交換元素的順序(其實這可有可無,一般可以設定為null(空)值)。

接下來,我們來看看它的實現:

跟qsort函式的原始碼其實大致相似:

void sort(void *base, size_t num, size_t size,

int (*cmp_func)(const void *, const void *),

void (*swap_func)(void *, void *, int size))

} /* sort */

for (i = n - size; i > 0; i -= size)

}}

接下來我們看乙個例項程式:

將**從linux核心中摳出來,然後編寫程式:

#include #include typedef int u32 ; 

/* fri : sort array

sec : array num

thr : array only num size

function:

function:

*/void sort(void *base, size_t num, size_t size,

int (*cmp_func)(const void *, const void *),

void (*swap_func)(void *, void *, int size)) ;

int cmpint(const void *a, const void *b) ;

static void u32_swap(void *a, void *b, int size) ;

static void generic_swap(void *a, void *b, int size);

int main(void);

int i = 0 ;

printf("隨機產生10個100以內的數:\n");

for(i = 0 ; i < 10 ; i++)

sort(array , 10 , sizeof(int) , cmpint , u32_swap) ;

putchar('\n');

printf("排序後的數:\n");

for(i = 0 ; i < 10 ; i++)

return 0 ;

}

void sort(void *base, size_t num, size_t size,

int (*cmp_func)(const void *, const void *),

void (*swap_func)(void *, void *, int size))

} /* sort */

for (i = n - size; i > 0; i -= size) }}

int cmpint(const void *a, const void *b)

static void u32_swap(void *a, void *b, int size)

static void generic_swap(void *a, void *b, int size)

while (--size > 0);

}

執行結果:

隨機產生10個100以內的數,通過排序介面sort排序後得到如下結果,驗證成功!

linux核心中的電源管理介面

1.pm runtime enable pm runtime disable 使能 禁止runtime pm,分別對dev power.disable depth執行 和 操作,這個變數的初始化值是1,預設是disable的狀態。2.pm runtime get sync pm runtime pu...

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...