亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

詳解C語言中的錯誤報告errno與其相關應用方法

2020-01-26 14:58:10
字體:
來源:轉載
供稿:網友

C語言標準庫中的錯誤報告用法有三種形式。
1、errno
errno在<errno.h>頭文件中定義,如下

#ifndef errno extern int errno; #endif 

外部變量errno保存庫程序中實現定義的錯誤碼,通常被定義為errno.h中以E開頭的宏,
所有錯誤碼都是正整數,如下例子

# define EDOM 33  /* Math argument out of domain of function. */ 

EDOM的意思是參數不在數學函數能接受的域中,稍后的例子中用到了這個宏。
errno的常見用法是在調用庫函數之前先清零,隨后再進行檢查。

在linux中使用c語言編程時,errno是個很有用的動動。他可以把最后一次調用c的方法的錯誤代碼保留。但是如果最后一次成功的調用c的方法,errno不會改變。因此,只有在c語言函數返回值異常時,再檢測errno。
errno會返回一個數字,每個數字代表一個錯誤類型。詳細的可以查看頭文件。/usr/include/asm/errno.h
如何把errno的數字轉換成相應的文字說明?

一個簡單的例子

#include <stdio.h> #include <errno.h> #include <string.h> #include <math.h>  int main(void) {  errno = 0;  int s = sqrt(-1);  if (errno) {   printf("errno = %d/n", errno); // errno = 33   perror("sqrt failed"); // sqrt failed: Numerical argument out of domain   printf("error: %s/n", strerror(errno)); // error: Numerical argument out of domain  }   return 0; 

2、strerror
strerror在<string.h>中定義,如下
__BEGIN_NAMESPACE_STD 
/* Return a string describing the meaning of the `errno' code in ERRNUM.  */ 
extern char *strerror (int __errnum) __THROW; 
__END_NAMESPACE_STD 
函數strerror返回一個錯誤消息字符串的指針,其內容是由實現定義的,字符串不能修改,但可以在后續調用strerror函數是覆蓋。

char *strerror(int errno)

使用方式如下:

fprintf(stderr,"error in CreateProcess %s, Process ID %d ",strerror(errno),processID)

將錯誤代碼轉換為字符串錯誤信息,可以將該字符串和其它的信息組合輸出到用戶界面。
注:假設processID是一個已經獲取了的整形ID

3、perror
perror在<stdio.h>中定義,如下
__BEGIN_NAMESPACE_STD 
/* Print a message describing the meaning of the value of errno.
   This function is a possible cancellation point and therefore not
   marked with __THROW.  */ 
extern void perror (const char *__s); 
__END_NAMESPACE_STD 
函數perror在標準錯誤輸出流中打印下面的序列:參數字符串s、冒號、空格、包含errno中當前錯誤碼的錯誤短消息和換行符。在標準C語言中,如果s是NULL指針或NULL字符的指針,則只打印錯誤短消息,而不打印前面的參數字符串s、冒號及空格。

void perror(const char *s)

函數說明
perror ( )用來將上一個函數發生錯誤的原因輸出到標準錯誤(stderr),參數s 所指的字符串會先打印出,后面再加上錯誤原因 字符串。此錯誤原因依照全局變量 errno 的值來決定要輸出的字符串。
另外并不是所有的c函數調用發生的錯誤信息都會修改errno。例如gethostbyname函數。
errno是否是線程安全的?
errno是支持線程安全的,而且,一般而言,編譯器會自動保證errno的安全性。
我們看下相關頭文件 /usr/include/bits/errno.h
會看到如下內容:

# 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 */

也就是說,在沒有定義__LIBC或者定義_LIBC_REENTRANT的時候,errno是多線程/進程安全的。
為了檢測一下你編譯器是否定義上述變量,不妨使用下面一個簡單程序。

#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;}

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
98精品国产高清在线xxxx天堂| 久久国产精品电影| 成人精品福利视频| 久久久久久香蕉网| 91爱视频在线| 孩xxxx性bbbb欧美| 国产脚交av在线一区二区| 欧美国产日韩免费| 久久久久99精品久久久久| 久久精品99无色码中文字幕| 亚洲一级黄色av| 欧美日韩亚洲91| 亚洲男人7777| 国产精品嫩草视频| 亚洲国产日韩欧美在线99| 精品毛片三在线观看| 国产精品免费网站| 亚洲图中文字幕| 亚洲日本aⅴ片在线观看香蕉| 欧美夫妻性生活xx| 亚洲xxx自由成熟| 国产精品第一页在线| 欧美激情二区三区| 91在线免费视频| 久久影院资源网| 欧美午夜宅男影院在线观看| 夜夜躁日日躁狠狠久久88av| 欧美激情精品久久久久久久变态| 亚洲精品视频播放| 亚洲黄色在线观看| 欧美午夜激情小视频| 国产97在线亚洲| 亚洲欧美成人精品| 亚洲欧美国产一区二区三区| 亚洲 日韩 国产第一| 91色在线观看| 国产精品成人免费电影| 国产成人精品视| 国产日韩欧美中文| 午夜精品久久久久久久白皮肤| 日韩在线视频免费观看| 亚洲影院高清在线| 国产精品电影在线观看| 国产精品视频999| 欧美日韩成人在线观看| 亚洲最大成人在线| 国产精品观看在线亚洲人成网| 国产精品网站入口| 日韩亚洲成人av在线| 992tv在线成人免费观看| 成人免费视频网| 精品亚洲男同gayvideo网站| 色无极亚洲影院| 国产精品入口尤物| 国内精品一区二区三区| 精品小视频在线| 国产成人精品一区二区| 国产91ⅴ在线精品免费观看| 最近2019好看的中文字幕免费| 日韩高清免费观看| 久久婷婷国产麻豆91天堂| 亚洲色图激情小说| 精品视频在线播放免| 亚洲精品一区久久久久久| 日韩国产高清污视频在线观看| 久久精品国产成人| 久久青草精品视频免费观看| 国产精品免费视频xxxx| 久久影院资源网| 欧美日韩一区二区三区在线免费观看| 欧美激情欧美激情| 亚洲视频欧美视频| 国产精品美乳在线观看| 亚洲国产成人av在线| 国产成人亚洲综合91精品| 欧美小视频在线| 欧美自拍视频在线观看| 69av视频在线播放| 日韩毛片在线看| 亚洲精品美女在线观看播放| 久久久www成人免费精品| 日韩免费不卡av| 92国产精品久久久久首页| 国产91精品在线播放| 国内精品久久久久久久| 91精品视频大全| 色综合伊人色综合网站| 久久国产精品偷| 亚洲aa中文字幕| 永久免费毛片在线播放不卡| 亚洲欧美激情另类校园| 91福利视频在线观看| 亚洲女人天堂网| 色综合天天狠天天透天天伊人| 国产日韩欧美影视| 91精品免费视频| 欧美日韩综合视频网址| 精品国产电影一区| 97久久国产精品| 国产精品久久久久一区二区| 色悠久久久久综合先锋影音下载| 亚洲欧美中文日韩v在线观看| 欧美一级淫片aaaaaaa视频| 欧美性xxxxhd| 亚洲成年网站在线观看| 国语自产精品视频在免费| 欧美高清性猛交| 亚洲人线精品午夜| 日本不卡视频在线播放| 欧美黑人一区二区三区| 少妇高潮 亚洲精品| 午夜精品美女自拍福到在线| 国产综合在线观看视频| 国产性色av一区二区| 在线观看国产精品日韩av| 精品久久久久久久久久| 欧美视频专区一二在线观看| 日韩视频第一页| 精品二区三区线观看| 91精品国产高清自在线| 青青草国产精品一区二区| 91福利视频网| 欧美整片在线观看| 欧美最近摘花xxxx摘花| 日韩欧美精品免费在线| 亚洲影院色在线观看免费| 国产精品入口福利| 亚洲国产91精品在线观看| 热久久视久久精品18亚洲精品| 国产成人av网址| 欧美国产视频一区二区| 日韩中文字幕久久| 国产精品黄页免费高清在线观看| 97av在线视频免费播放| 国产美女久久精品香蕉69| 亚洲va欧美va国产综合剧情| 欧美激情亚洲激情| 中文字幕成人在线| 国产精品精品久久久| 欧美日韩高清在线观看| 日韩少妇与小伙激情| 日韩有码片在线观看| 欧美日韩成人在线播放| 欧美日韩国产精品一区二区三区四区| 91视频国产高清| 国产一区二区丝袜| 欧美精品亚州精品| 青草热久免费精品视频| 国产精品99蜜臀久久不卡二区| www亚洲精品| 亚洲аv电影天堂网| 亚洲的天堂在线中文字幕| 国产成人aa精品一区在线播放| 亚洲人午夜精品免费| 国产精品亚洲美女av网站| 日韩美女在线看| 欧美激情图片区| 九九精品在线观看| 久久国产精品电影| 欧美日韩国产精品一区二区不卡中文| 这里只有精品久久| 欧美成人网在线| 亚洲精品mp4| 日韩在线观看成人|