天天看點

IS_ERR()

IS_ERR()判斷一個指針是否有效

使用場景:一般在建立線程的時候,作為建立成功的判斷條件。

例如:
struct task_struct *task;
task = kthread_create(void,NULL,"name");
if(0!= IS_ERR(task))
{
	return -1;
}
           

補充:

如果指針指向了最後一個page,那麼說明實際上這不是一個有效的指針。這個指針裡儲存的實際上是一種錯誤代碼。而通常很常用的方法就是先用IS_ERR()來判斷是否是錯誤,然後如果是,那麼就調用PTR_ERR()來傳回這個錯誤代碼。

來自 https://blog.csdn.net/ce123_zhouwei/article/details/8450618

而所謂的錯誤指針就是指其已經到達了最後一個page,即核心用最後一頁捕捉錯誤。比如對于32bit的系統來說,核心空間最高位址0xffffffff,那麼最後一個page就是指的0xfffff000~0xffffffff(假設4k一個page),這段位址是被保留的。核心空間為什麼留出最後一個page?我們知道一個page可能是4k,也可能是更多,比如8k,但至少它也是4k,是以留出一個page出來就可以讓我們把核心空間的指針來記錄錯誤了。核心傳回的指針一般是指向頁面的邊界(4k邊界),即ptr & 0xfff == 0。如果你發現你的一個指針指向這個範圍中的某個位址,那麼你的代碼肯定出錯了。IS_ERR()就是判斷指針是否有錯,如果指針并不是指向最後一個page,那麼沒有問題;如果指針指向了最後一個page,那麼說明實際上這不是一個有效的指針,這個指針裡儲存的實際上是一種錯誤代碼。而通常很常用的方法就是先用IS_ERR()來判斷是否是錯誤,然後如果是,那麼就調用PTR_ERR()來傳回這個錯誤代碼。

繼續閱讀