當unix函式出錯時,通常會返回乙個負值,而且整型變數errno通常被設定為包含出錯資訊的乙個值。
整型變數errno包含在標頭檔案中,該檔案中包含了errno的各種取值,這些取值通常以字母e開頭(例如:eaccess表示沒有訪問許可權).
在以前的unix系統中通常將errno定義為:
extern int errno
但是在引入多執行緒的概念後,由於多執行緒共享記憶體的位址空間,每個執行緒都應該有屬於它自己的區域性errno以防止執行緒之間的幹 擾。linux為了支援多執行緒訪問errno,將其定義為:
extern int *__errno_location()
#define errno (*__errno_location())
對於errno應該知道兩條規則:
1. 如果函式沒有出錯,errno的值就不會被重置,在這種情況下檢視errno的值沒有意義,所以當且僅當函式呼叫出錯時才去檢視errno 的值。
2. 任意函式都不會將errno的值置為0,在中定義的常量都不為0.
為了方便檢視錯誤資訊,標準c提供了如下兩個函式:
1. char *strerror(int errno)
該函式將錯誤碼errno作為引數,將該錯誤碼表示的詳細資訊作為字串返回。
#include#include#includeint
main()
return 0;
}
如果檔案/tmp/wahaha不存在,將列印:
no such file or directory
2. void perror(char *message)
perror 封裝了錯誤碼errno,將error表示的錯誤資訊重定向到stderr上,其輸出格式為:message:errno表示的錯誤資訊
.
#include#include#includeint
main()
return 0;
}
如果檔案/tmp/wahaha不存在,將列印:
this is a error msg: no such file or directory
UNIX 環境高階程式設計之出錯處理
在 unix 系統中,系統呼叫出錯通常會設定變數 errno 的值,以指示出錯的具體型別,一般為負值,這些值通常對應乙個描述性資訊,可以通過 strerror errno 獲取或者通過 perror 將錯誤資訊輸出到標準錯誤。在支援執行緒的系統環境中,同一程序的不同執行緒有各自的 errno,因此不...
unix環境高階程式設計 err檔案
include apue.h include for definition of errno include iso c varialbe aruments static void err doit int,int,const char va list nonfatal error related ...
Linux 系統應用程式設計 出錯處理 errno
1.errno變數 檔案 中定義了符號 errno 以及可以賦予它的各種常量,這些常量都是以字元 e 開頭。例如,若 errno 等於常量 eacces,表示產生了許可權問題 例如,沒有開啟所要求檔案的足夠許可權 當 unix 函式出錯時,常常返回乙個負值,而且將整型變數 errno 設定成含有附加...