📅  最后修改于: 2023-12-03 15:14:02.365000             🧑  作者: Mango
在C++中,errno是一个整数类型的全局变量,用于表示最近一次发生的系统错误代码。errno被定义在头文件<errno.h>中,在C++11之后的标准中也可以通过头文件
errno通常用于与函数库函数一起使用,该函数会在遇到错误时将错误代码设置为errno。以下是一些常见的函数库函数和它们可能设置的errno值:
以下是errno常量的完整列表:
| 常量名称 | 描述 | |--------|--------| | EDOM | 数学参数超出了其定义域 | | ERANGE | 结果超出了存储空间的范围 | | EACCES | 拒绝了对文件的访问 | | EAGAIN | 内核映像已满 | | EINTR | 执行被中断 | | EINVAL | 无效的参数 | | ENODEV | 没有这样的设备 | | ENOENT | 找不到文件或目录 | | ENOMEM | 没有足够的内存 | | ENOSYS | 函数不支持 | | EPERM | 操作不允许 |
可以通过给errno赋值为0来重置它,以便在函数之间使用。 如果errno没有设置过任何错误代码,则其值为0。有些函数在成功完成时不会清除errno值,因此在使用之前需要注意。
以下是一个示例程序,演示如何使用errno常量来检测函数调用是否失败:
#include <iostream>
#include <cerrno>
#include <cstdio>
int main()
{
FILE *fp = fopen("non-existent-file.txt", "r");
if(fp == NULL){
std::cout << "Failed to open file: " << strerror(errno) << std::endl;
}
else{
fclose(fp);
}
return 0;
}
在本例中,尝试打开一个不存在的文件时,fopen()将返回NULL并设置errno为ENOENT。程序使用strerror()函数将errno转换为人类可读的字符串,并将其输出到stdout。