Linux编程-errno及perror的应用

本文最后更新于:1 年前

perror 定义在头文件<stdlib.h>

errno 定义在头文件<errno.h>

void perror(const char *s);

函数说明:

**perror ( )**用 来 将 上 一 个 函 数 发 生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno 的值来决定要输出的字符串。

在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用”某些”函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信息和现在的errno所对应的错误一起输出。

errno是一个全局变量,这里使用不同的数值代表不同场景下出错的原因,当调用linux 系统api 失败时,这时可以根据errno知道失败的大致原因。在程序代码中包含errno.h ,然后每次程序调用失败时系统会自动用用错误代码填充errno

1
2
3
4
5
6
7
8
9
10
//打开设备
fd = open(TEST_FILE,O_RDWR);
if(fd < 0)
{
perror("TEST_FILE");
printf("errno=%d\n",errno);
char * mesg = strerror(errno);
printf("Mesg:%s\n",mesg);
exit(1);
}

上述代码结果为

1
2
3
bind: Address already in use
errno=98
Mesg:Address already in use