日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

關(guān)于Linux操作系統(tǒng)內(nèi)核中的指針和錯(cuò)誤值

;在內(nèi)核的代碼和驅(qū)動(dòng)程序中經(jīng)常見到ERR_PTR, IS_ERR, PTR_ERR這三個(gè)內(nèi)聯(lián)函數(shù) 。許多的內(nèi)核函數(shù)需要返回一個(gè)指針 , 但是函數(shù)的調(diào)用可能失敗 , 一般我們處理這樣的情形都是返回一個(gè)NULL指針 , 就像malloc或kmalloc在沒有獲得指定的空間申請(qǐng)時(shí)的返回值一樣 。但是有時(shí)我們想知道導(dǎo)致函數(shù)失敗的原因 , 但是返回NULL就顯得信息不夠 。因此有些函數(shù)返回一個(gè)實(shí)際的錯(cuò)誤編碼以便對(duì)引起錯(cuò)誤的原因做一些處理 。很多內(nèi)核接口通過把錯(cuò)誤值編碼到一個(gè)指針值中來(lái)返回錯(cuò)誤信息 。當(dāng)處理這樣的函數(shù)時(shí) , 判斷是否成功調(diào)用就不能是簡(jiǎn)單的和NULL進(jìn)行比較 。為了方便使用這樣的類型接口 , 2.6的內(nèi)核在linux/err.h中實(shí)現(xiàn)了三個(gè)內(nèi)聯(lián)函數(shù): inline void *ERR_PTR(long error){return (void *) error;}返回指針類型的函數(shù)可以通過這個(gè)函數(shù)來(lái)返回一個(gè)錯(cuò)誤值 。這里的error是通常的負(fù)的錯(cuò)誤編碼 。調(diào)用者可以使用IS_ERR來(lái)檢查所返回的指針是否是一個(gè)錯(cuò)誤編碼 。inline long IS_ERR(const void *ptr){return (unsigned long)ptr > (unsigned long)-1000L;}如果需要實(shí)際的錯(cuò)誤編碼 , 可以通過PTR_ERR函數(shù)提取 inline long PTR_ERR(const void *ptr){return (long) ptr;}只有在IS_ERR返回真的時(shí)候才能使用PTR_ERR 。

    推薦閱讀