1.errno多線程
POSIX和ISO C將errno定義爲一個符號,它擴展稱爲一個可修改的整型左值(lvalue)。它能夠使一個包含出錯編號的證書,也能夠是一個返回出錯編號指針的函數。函數
在支持線程的環境中,多個線程共享進程地址空間,爲避免一個線程干擾另外一個線程,例如Linux支持多線程存取errno,將其定義爲:spa
extern int *__errno_location(void);線程
#define errno (*__errno_location)指針
2.c標準定義了兩個函數,用於打印出錯信息。code
#include <string.h> char *strerror(int errnum);
strerror函數將errnum映射爲一個出錯消息字符串,而且返回此字符串的指針.進程
#include <stdio.h> void perror(const char *msg);
它首先輸出由msg指向的字符串,而後是一個冒號,一個空格,接着是對應於errno值的出錯信息,最後是一個換行符。字符串
3.實例string
#include "apue.h" #include <errno.h> int main(int argc,char *argv[]){ fprintf(stderr,"EACCES:%s\n",strerror(EACCES)); errno=ENOENT; perror(argv[0]); exit(0); }
4.出錯恢復it
errno.h中定義的各類出錯能夠分紅兩類:致命性的和非致命性的。