APUE學習之出錯處理

     當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
相關文章
相關標籤/搜索