學習園地:Linux系統內核中判斷大小的宏

Min和Max宏:

/*

* min()/max() macros that also do

* strict type-checking.. See the

* "unnecessary" pointer comparison.

*/

#define min(x,y) ({ typeof(x) _x = (x); typeof(y) _y = (y); (void) (&_x == &_y); _x < _y ? _x : _y; })

#define max(x,y) ({ typeof(x) _x = (x); typeof(y) _y = (y); (void) (&_x == &_y); _x > _y ? _x : _y; })

/*

* ..and if you can't take the strict

* types, you can specify one yourself.

*

* Or not use min/max at all, of course.

*/

#define min_t(type,x,y) ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })

#define max_t(type,x,y) ({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })

不是感覺跟我們用的有些不一樣啊:

(void) (&_x == &_y);

(void) (&_x == &_y)這句話本身都執行程序來講完全是一句廢話,它的作用在于,本身我們無法做這樣的操作typeof(_x)==typeof(_y),所以故意判斷他們2個的地址指針是否相等,顯然是不可能相等,但是如果_x和_y的類型不一樣,其指針類型也會不一樣,2個不一樣的指針類型進行比較操作,會抛出一個編譯警告。也就是說char *p; int *q; 然後p==q;,這個判斷因爲一個是char*一個是int*,會在編譯時産生一個warning。巧妙就巧妙在這裏。

由于內核是很多開發著一起開發的,其中還有一些其他的實現,就跟我們平常用的一樣:

#define min(a,b) (((a) < (b)) ? (a) : (b))

試想:

min(++a,++b) ==> ((++a)<(++b))?(++a):(++b)

是不是就有問題了,傳入的參數被加了兩次。

學習園地:了解Linux下Fdisk的基礎知識
Fdisk -l顯示下列信息 [root@localhost ~]# fdisk -l Disk /dev/sda: 78.0 GB, 78026450432 bytes 255 heads, 63 sectors/track, 9486 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Sta...查看完整版>>學習園地:了解Linux下Fdisk的基礎知識
 
學習Linux 0.01 內核分析和操作系統設計的准備工作
主要是要准備幾個工具軟件和這本書的配套光盤。1,配套光盤比較不容易找到這個東西,我是在上找到的,文件被分成21個塊,下載速度非常的快,也不知爲什麽會這麽快,可能是新開的網站的原因 。配套光盤可以讓我們省去...查看完整版>>學習Linux 0.01 內核分析和操作系統設計的准備工作
 
Linux系統新版內核本周發布獲新架構支持
將有成堆的網絡附加存儲(NAS)服務器和其他顧客用具將可能獲得幹線內核和Debian GNU/Linux支持。據可靠新聞來源透露,內核的2.6.25版本現在已經到了測試版的最後階段,它將會支持俊茂微電子(Marvell)的Feroceon微架構...查看完整版>>Linux系統新版內核本周發布獲新架構支持
 
Linux系統內核網絡參數的意義及應用
  摘要:   本文主要介紹了linux系統位于目錄/proc/sys/net/ipv4/下的部分內核網絡參數,同時對通過linux內核網絡參數的調整來提高linux系統的安全性和穩定性提出了自己的見解。從而爲系統管理員進一步增強網絡的...查看完整版>>Linux系統內核網絡參數的意義及應用
 
Linux系統應用程序和內核模塊的區別
  1.應用程序是從頭到尾執行單個任務;模塊卻只是預先注冊自己以便服務于將來的某個請求,其中,函數init_module(模塊的入口)的任務是爲以後調用模塊函數預先做准備,函數cleanup_module(模塊的第二入口)是在模塊卸...查看完整版>>Linux系統應用程序和內核模塊的區別
 
Linux系統新版內核本周發布獲新架構支持
將有成堆的網絡附加存儲(NAS)服務器和其他顧客用具將可能獲得幹線內核和Debian GNU/Linux支持。據可靠新聞來源透露,內核的2.6.25版本現在已經到了測試版的最後階段,它將會支持俊茂微電子(Marvell)的Feroceon微架構...查看完整版>>Linux系統新版內核本周發布獲新架構支持
 
學習園地:編譯Linux系統內核的方法步驟
1.需要先安裝編譯環境 進入 root 帳戶: > su 輸入密碼 安裝必要的工具: > apt-get install build-essential (安裝 gcc, make 等) > apt-get install libncurses-dev (安裝 make menuconfig 時必須的庫文...查看完整版>>學習園地:編譯Linux系統內核的方法步驟
 
學習園地:Linux操作系統下內核引導參數
1.“boot=” 此參數指明包含引導扇區的設備名(如:/dev/had),若此項忽略,則從當前的根分區中讀取引導扇區。 2.“root=” 此參數告訴內核啓動時以哪個設備作爲根文件系統使用,其設定值爲構造內核時根文件系統的設...查看完整版>>學習園地:Linux操作系統下內核引導參數
 
學習園地:什麽是Linux系統下的文件鏈接
鏈接有兩種,一種被稱爲硬鏈接(Hard Link),另一種被稱爲符號鏈接(Symbolic Link)。默認情況下,ln命令産生硬鏈接。 硬連接指通過索引節點來進行的連接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什麽...查看完整版>>學習園地:什麽是Linux系統下的文件鏈接
 
 
回到王朝網路移動版首頁