久久99免费视频,最近中文字幕大全在线电影视频,亚洲 自拍 色综合图区,日本色站,又大又粗sj网站

Linux錯誤碼介紹

來源:嵌入式Linux充電站     時間:2023-06-27 16:29:11


【資料圖】

錯誤碼

在處理一些程序出錯語句中,不管是用戶空間還是內(nèi)核空間,通常都會返回一個錯誤碼。例如return -ERROR。

這些錯誤碼是Linux內(nèi)核定義的,它幾乎包括了我們能想到的所有錯誤類型。

錯誤碼的定義位于:include/uapi/asm-generic/error-base.hinclude/uapi/asm-generic/error.h兩個頭文件中。

其中error-base.h定義了最常用的一些錯誤,其余的錯誤碼定義在error.h中。

include/uapi/asm-generic/error-base.h

include/uapi/asm-generic/error.h

錯誤碼案例

例如,返回一個IO錯誤,錯誤碼是EIO

dev = init(&ptr);if(!dev)return  -EIO

如果是對系統(tǒng)調(diào)用(read、write、ioctl、mmap等)的錯誤處理,由于系統(tǒng)調(diào)用會陷入內(nèi)核,當內(nèi)核空間出錯時, 錯誤碼會自動賦值給用戶空間的errno變量,用戶空間調(diào)用strerror(errno)可以將錯誤轉為可讀字符串。例如:

#include < errno.h >/* 訪問errno全局變量 */#include < string.h >...if(write(fd,  buf,  1)< 0) {    printf("something gone wrong!  %s\\n",  strerror(errno));}...

goto語句

錯誤碼和goto語句也是經(jīng)常一起出現(xiàn)的,當遇到錯誤時,除了返回錯誤碼,也 要把之前的所有初始化進行撤銷,此時應該用goto語句,這在驅動的入口函數(shù)中很常見。例如:

...ret = reset_control_deassert(phy- >reset);if (ret) goto err_reset;err_reset: clk_disable_unprepare(phy- >hsic_clk); return ret;...

標簽:

精彩放送