博客搬家,原地址:https://langzi989.github.io/2017/05/22/Unix错误处理/
当Unix系统函数出错的时候,通常会返回一个负值,同时整型变量errno通常被设置为具有特定信息的值。例如当使用open打开文件的时候,若当前文件不存在,此时open的返回值为-1,errno被设置为2(ENOENT)。
系统函数出错的返回值不一定为负数,是根据具体函数具体定义的,如当系统函数返回一个指针时,若出错,将会返回NULL。
Linux系统中errno.h中定义了一系列的错误宏,他们之处了不同错误对应的错误ID,为整型变量,可被赋值。
关于errno需要注意的两点:
- 如果没出错,errno将不会被进程设置,所以一般当利用函数返回值确认已经出错的时候,再去查看相应的errno
- 任何函数不会讲errno的值设置为0,而且在errno.h中定义的所有宏定义都不为0
Unix错误处理的两个相关函数
strerror函数
函数原型
#include <string.h>
char* strerror(int errno);
函数功能
此函数的功能为将errno转化为其对应的具体错误信息。
示例代码
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
int fd = open("data");
if (fd == -1) {
printf("%s", strerror(errno));
}
}
perror函数
函数原型
#include <stdio.h>
void perror(const char* msg);
函数功能
perror基于当前errno的值,在标准错误流上输出一个出错信息。输出内容首先输出msg所指的字符串,然后一个冒号,空格