errno會(huì)返回一個(gè)數(shù)字,每個(gè)數(shù)字代表一個(gè)錯(cuò)誤類型。詳細(xì)的可以查看頭文件。/usr/include/asm/errno.h

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的富川網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
如何把errno的數(shù)字轉(zhuǎn)換成相應(yīng)的文字說(shuō)明?
方式一:可以使用strerrno函數(shù)
char
*strerror(int
errno)
使用方式如下:
fprintf(stderr,"error
in
CreateProcess
%s,
Process
ID
%d
",strerror(errno),processID)
將錯(cuò)誤代碼轉(zhuǎn)換為字符串錯(cuò)誤信息,可以將該字符串和其它的信息組合輸出到用戶界面。
注:假設(shè)processID是一個(gè)已經(jīng)獲取了的整形ID
方式二:使用perror函數(shù)
void
perror(const
char
*s)
函數(shù)說(shuō)明
perror
(
)用來(lái)將上一個(gè)函數(shù)發(fā)生錯(cuò)誤的原因輸出到標(biāo)準(zhǔn)錯(cuò)誤(stderr),參數(shù)s
所指的字符串會(huì)先打印出,后面再加上錯(cuò)誤原因
字符串。此錯(cuò)誤原因依照全局變量
errno
的值來(lái)決定要輸出的字符串。
另外并不是所有的c函數(shù)調(diào)用發(fā)生的錯(cuò)誤信息都會(huì)修改errno。例如gethostbyname函數(shù)。
errno是否是線程安全的?
errno是支持線程安全的,而且,一般而言,編譯器會(huì)自動(dòng)保證errno的安全性。
我們看下相關(guān)頭文件
/usr/include/bits/errno.h
會(huì)看到如下內(nèi)容:
#
if
!defined
_LIBC
||
defined
_LIBC_REENTRANT
/*
When
using
threads,
errno
is
a
per-thread
value.
*/
#
define
errno
(*__errno_location
())
#
endif
#
endif
/*
!__ASSEMBLER__
*/
#endif
/*
_ERRNO_H
*/
也就是說(shuō),在沒(méi)有定義__LIBC或者定義_LIBC_REENTRANT的時(shí)候,errno是多線程/進(jìn)程安全的。
為了檢測(cè)一下你編譯器是否定義上述變量,不妨使用下面一個(gè)簡(jiǎn)單程序。
#include
stdio.h
#include
errno.h
int
main(
void
)
{
#ifndef
__ASSEMBLER__
printf(
"Undefine
__ASSEMBLER__/n"
);
#else
printf(
"define
__ASSEMBLER__/n"
);
#endif
#ifndef
__LIBC
printf(
"Undefine
__LIBC/n"
);
#else
printf(
"define
__LIBC/n"
);
#endif
#ifndef
_LIBC_REENTRANT
printf(
"Undefine
_LIBC_REENTRANT/n"
);
#else
printf(
"define
_LIBC_REENTRANT/n"
);
#endif
return
0;
}
這個(gè)是警告,可以不理,意思是func的返回類型有問(wèn)題吧,應(yīng)該是函數(shù)定義了void,但在函數(shù)里寫了,return 0;,把代碼貼出來(lái)看看。
inquire,judgeNum,judgeName這三個(gè)函數(shù)定義有問(wèn)題。
最好把ATP.CPP的205行附近的代碼貼出來(lái),看到代碼才知道是什么錯(cuò)誤。
一般都是在處理文件時(shí)用到的比較多,如:
#include?stdio.h
#include?stdlib.h
int?main(void)
{
perror("File?error?");
}
#include?stdio.h
#include?stdlib.h
int?main(void){
FILE?*fp;
if((fp=fopen("test",?"rb"))==NULL)?{
printf("Cannot?open?file.\n");
exit(1);
}
putc('C',?fp);
if(ferror(fp))?{?//?檢測(cè)文件是否出錯(cuò)
printf("File?Error\n");
exit(1);
}
fclose(fp);
return?0;
}
當(dāng)前名稱:c語(yǔ)言中的error函數(shù) c語(yǔ)言 error
文章源于:http://www.chinadenli.net/article12/dopghgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、關(guān)鍵詞優(yōu)化、自適應(yīng)網(wǎng)站、網(wǎng)站導(dǎo)航、企業(yè)建站、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)