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
int
comp(
const
void
*a,
const
void
*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...