C說話中前往毛病信息的相干函數用法總結。本站提示廣大學習愛好者:(C說話中前往毛病信息的相干函數用法總結)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中前往毛病信息的相干函數用法總結正文
C說話strerror()函數:前往毛病緣由的描寫字符串
頭文件:
#include <string.h>
界說函數:
char * strerror(int errnum);
函數解釋:strerror()用來依參數errnum 的毛病代碼來查詢其毛病緣由的描寫字符串, 然後將該字符串指針前往.
前往值:前往描寫毛病緣由的字符串指針.
典范:
/* 顯示毛病代碼0 至9 的毛病緣由描寫 */ #include <string.h> main() { int i; for(i = 0; i < 10; i++) printf("%d : %s\n", i, strerror(i)); }
履行:
0 : Success 1 : Operation not permitted 2 : No such file or directory 3 : No such process 4 : Interrupted system call 5 : Input/output error 6 : Device not configured 7 : Argument list too long 8 : Exec format error 9 : Bad file descriptor
C說話perror()函數:打印比來一次體系毛病信息
函數perror()用於拋出比來的一次體系毛病信息,其原型以下:
void perror(char *string);
【參數】string為要輸入的毛病信息。
解釋:perror()用來將上一個函數產生毛病的緣由輸入到尺度毛病(stderr)。參數string所指的字符串會先打印出,前面再加上毛病緣由字符串,此毛病緣由按照全局變量errno 的值來決議要輸入的字符串。
在庫函數中有個errno變量,每一個errno值對應著以字符串表現的毛病類型。當你挪用"某些"函數失足時,該函數曾經從新設置了errno的值。perror函數只是將你輸出的一些信息和如今的errno所對應的毛病一路輸入。
【實例】翻開一個不存在的文件並輸入毛病信息。
#include <stdio.h> #include <assert.h> #include <stdlib.h> int main( void ) { FILE *fp; fp = fopen( "test.txt", "w" );/*翻開文件*/ assert( fp ); /*斷言不為空*/ fclose( fp );/*封閉*/ fp = fopen( "nulltest.txt", "r" );/*翻開一個不存在的文件*/ if ( NULL == fp ) { /*顯示比來一次毛病信息*/ perror("fopen( \"nulltest.txt\", \"r\" )"); } return 0; }
運轉成果:
fopen( "nulltest.txt", "r" ):No such file or directory
法式先界說一個文件指針fp,以後創立文件 test.txt,斷言文件翻開勝利,然後封閉該文件,再以只讀的方法翻開文件nulltest.txt,斷定該文件指針能否問空,假如為空則應用 perror() 輸入毛病信息。perror()用來將上一個函數產生毛病的緣由 輸入到尺度裝備(stderr)。函數參數string所指的字符串會先打印出, 前面再加上毛病緣由字符串。此毛病緣由按照全局變量error的值來決議要輸入的字符串。
假如持續挪用perror,以下:
perror("1"); perror("2");
會湧現以下成果:
1:success 2:Illegal seek
這類成績湧現的緣由是:
perror()是經由過程lseek辦法依據errorno查找對應的毛病信息,然後輸入的。
在法式運轉的時刻,errorno的初始值對應的信息為:Success。只要法式中有毛病湧現時,才會轉變給errorno。假如沒有毛病湧現,errorno的值是不會轉變的。
然則perror辦法是個破例,每次挪用perror辦法,都邑起首輸入errorno對應的信息,然後重置errorno為undefined,這時候假如立時在一次挪用perror,perror中的lseek依據undefined去查找毛病信息,就會拋錯,毛病恰好被記載在errorno中,是以,就把lseek的毛病打印出來了。所以第一次挪用perror辦法的時刻會正常數據毛病信息,然則假如持續挪用第二次,因為第一次的perror挪用曾經把errorno設置成了undefined,所以持續的第二次,第三次...........第一億次挪用都邑輸入Illegal seek毛病。
C說話ferror()函數:檢討文件流能否有毛病產生
頭文件:
#include <stdio.h>
界說函數:
int ferror(FILE *stream);
函數解釋:ferror()用來檢討參數stream 所指定的文件流能否產生了毛病情形, 若有毛病產生則前往非0 值.
前往值:假如文件流有毛病產生則前往非0 值.