1、在程序出错时,我们通过全局变量错误号errno和perror函数能够很快的定位到错误原因。
Linux错误代码及其含义
二、错误处理函数
许多不同的函数库都在失败时设置全局变量errno的值来指明失败原因。值得注意的是函数报告出错后必须立刻检查errno变量,因为它有可能被下一个函数调用所覆盖。
有两个非常有用的函数可以用来报告出现的错误:
#include <string.>
char *strerror(int errno);
该函数把错误代码映射为一个字符串,对错误类型进行说明。
#include <stdio.h>
void perror(const char *s);
该函数也把errno变量中报告的错误应为到一个字符串,并把它输出到标准错误输出流。
————————————————
2、可以通过strerror(errno)查看错误信息, errno是调试程序的一个重要方法。
常见的errno错误码有以下这些:
#define EPERM 1 /* Operation not permitted */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
#define EIO 5 /* I/O error */
#define ENXIO 6 /* No such device or address */
#define E2BIG 7 /* Argument list too long */
#define ENOEXEC 8 /* Exec format error */
#define EBADF 9 /* Bad file number */
#define ECHILD 10 /* No child processes */
eg1:
FILE *fp = NULL;
int errNum = 0;
if ((fp =fopen(“./test/1.txt”, “r”)) == NULL)
{undefined
errNum = errno;
printf(“open fail errno = %d reason = %s \n”, errNum, strerror(errNum));
}
eg2:
int errNum = 0;
FILE* fp = fopen("/data/media/dump_audio_hal.pcm", "a+");
if (fp == NULL) {
errNum = errno;
ALOGE("[yaoyao]open fail errno = %d reason = %s \n", errNum, strerror(errNum));}