當UNIX函數發生錯誤時,通常會返回一個負值,而且整形變數errno通常被設置為具有特定信息的值。 errno是全局變數,僅當函數出錯才有被改變。對待errno,應註意兩條規則 1:如果沒有出錯,其值不會被常式清除,也就是說,當且僅當函數出錯時,馬上檢查errno的值才有意義。 2:任何函數都不會將 ...
當UNIX函數發生錯誤時,通常會返回一個負值,而且整形變數errno通常被設置為具有特定信息的值。 errno是全局變數,僅當函數出錯才有被改變。對待errno,應註意兩條規則 1:如果沒有出錯,其值不會被常式清除,也就是說,當且僅當函數出錯時,馬上檢查errno的值才有意義。 2:任何函數都不會將errno的值置為0。 C標准定義了兩個函數,用於列印出錯信息:char *strerror(int errnum)和void perror(const char *msg)。 strerror函數將errnum(通常就是errno的值)映射為出錯消息字元串,並返回該字元串的指針。 perror函數基於errno的當前值,在標準錯誤上產生一條出錯消息然後返回。 例子: #include "apue.h" #include <errno.h> int main(int argc, char **argv) { fprintf(stderr, "EACCES: %s\n", strerror(EACCES)); errno = ENOENT; perror(argv[0]); return 0; } ./a.out EACCES: Permission denied ./a.out: No such file or directory