errno、strerror、perror的使用
errno、strerror、perror的使用
(2018-11-02 23:46:45)
呼叫linux 系統api 的時候會出現一些錯誤,想知道失敗的原因
一、errno
1.errno是"errno.h"中定義的以E開頭的巨集,代表數字。
(如果是在核心,可能是/usr/include/asm/errno.h 、include/asm-generic/errno-base.h)
2.程式剛剛啟動的時候,errno 被設定為 0;程式在執行過程中,任何一個函式發生錯誤都有可能修改 errno 的值。
3.標準庫中的函式只會將 errno 設定為一個用以表明具體錯誤型別的非零值,不會再將 errno 設定回零值。
4.再次設定 errno 的值會覆蓋以前 errno 的值
二、strerror
作用:返回errno對應的字串
標頭檔案:error.h
函式原型:char *strerror(int errnum);
返回值:errno對應的字串
例程:
FILE *fp=NULL;
fp = fopen("test.txt", "r");
if(fp == NULL){
printf("%s\n",strerror(errno));
}
執行結果:(如果沒有此檔案)
No such file or directory
三、perror
作用:先列印s對應的字串,再列印:(冒號),再列印errno對應的字串
標頭檔案:error.h
函式原型:void perror(const char *s);
例程:
FILE *fp=NULL;
fp = fopen("test.txt", "r");
if(fp == NULL){
perror("Open test.txt");
}
執行結果:(如果沒有此檔案)
Open test.txt:No such file or directory