Linux的系统错误
一、Linux系统错误简介
- 在
C++
程序中,如果调用了库函数,可以通过函数的返回值判断调用是否成功。其实,还有一个整型的全局变量errno
,存放了函数调用过程中产生的错误代码。 - 如果调用库函数失败,可以通过
errno
的值来查找原因,这也是调试程序的一个重要方法。 errno
在<errno.h>
以及<cerrno>
中声明。
配合strerror()
库函数,可以查看出错的详细信息。
二、sterror()库函数
strerror()
在<string>
以及<cstring>
中声明,用于获取错误代码对应的详细信息。
char *strerror(int errnum); // 非线程安全。
int strerror_r(int errnum, char *buf, size_t buflen); // 线程安全。
gcc8.3.1
一共有134
个错误代码。- 示例:
#include <iostream>
#include <cstring>
#include <string>
#include <cerrno>
#include <sys/stat.h>
using namespace std;
int main()
{
// 创建目录失败(没有这个路径)
int code = mkdir("/home/acs/lihy/pro/tmp/aaa", 0755);
cout << "code = " << code << endl;
// 输出 2:No such file or directory
cout << errno << ":" << strerror(errno) << endl;
return 0;
}
#include <iostream>
#include <cstring>
#include <string>
#include <cerrno>
#include <sys/stat.h>
using namespace std;
int main()
{
// 目录创建成功
int code = mkdir("/home/acs/lihy/pro/tmp", 0755);
cout << "code = " << code << endl;
// 输出 0:Success
cout << errno << ":" << strerror(errno) << endl;
return 0;
}
#include <iostream>
#include <cstring>
#include <string>
#include <cerrno>
#include <sys/stat.h>
using namespace std;
int main()
{
// 目录创建失败(目录已存在)
int code = mkdir("/home/acs/lihy/pro/turtle", 0755);
cout << "code = " << code << endl;
// 输出 17:File exists
cout << errno << ":" << strerror(errno) << endl;
return 0;
}