OS X下UNIX环境高级编程(第三版)学习日志-第一章ChapterI,出错处理

1.errno

POSIX和ISO C将errno定义为一个符号,它扩展称为一个可修改的整型左值(lvalue)。它可以使一个包含出错编号的证书,也可以是一个返回出错编号指针的函数。

在支持线程的环境中,多个线程共享进程地址空间,为避免一个线程干扰另一个线程,例如Linux支持多线程存取errno,将其定义为:

extern int *__errno_location(void);

#define errno (*__errno_location)

2.c标准定义了两个函数,用于打印出错信息。

#include <string.h>
char *strerror(int errnum);


strerror函数将errnum映射为一个出错消息字符串,并且返回此字符串的指针.


#include <stdio.h>
void perror(const char *msg);


它首先输出由msg指向的字符串,然后是一个冒号,一个空格,接着是对应于errno值的出错信息,最后是一个换行符。


3.实例

#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.出错恢复

errno.h中定义的各种出错可以分成两类:致命性的和非致命性的。



你可能感兴趣的:(c,unix,osx,Unix环境高级编程)