Linux C/C++ 系统错误

在C++中,如果调用了库函数,可以通过函数的返回值判断调用是否成功。其实还有一个整型的全局变量errno,存放了函数调用过程中产生的错误代码。

如果调用库函数失败,可以通过errno的值来查找原因

复制代码
#include <errno.h>

strerror()库函数(在<string.h>中声明)

复制代码
char *strerror(int errnum);		//非线程安全
int strerror_r(int errnum,char *buf,size_t buflen);		//线程安全

gcc8.3.1版本一共有133个错误代码

举例

复制代码
#include<iostream>
#include<string.h>
#include<errno.h>
#include<sys/stat.h>
using namespace std;

int main()
{
    int iret = mkdir("/tmp/aaa",0755);

    cout<<"iret="<<iret<<endl;
    cout<<"error="<<strerror(errno)<<endl;
}

[root@localhost 06demoerror]# g++ -o demo_error demo_error.cpp 
[root@localhost 06demoerror]# ./demo_error 
iret=0
error=Success
[root@localhost 06demoerror]# ./demo_error 
iret=-1
error=File exists

perror()库函数

在<stdio.h>中声明,用于在控制台显示最近一次系统错误消息

复制代码
void perror(const char*s);

调用库函数不一定设置errno,errno不能作为调用库函数失败的标准


推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/3Zqhgt

相关推荐
Lam㊣1 分钟前
服务器端口转发的方法
linux·服务器
zxnbmk2 分钟前
【7】Kubernetes存储(本章知识密度较高,仅浅浅了解后续详解)
linux·云原生·容器·kubernetes
ChangYan.3 分钟前
Windows命令行(cmd)下快速查找文件路径(类似Linux下find命令)
linux·运维·服务器
橘颂TA17 分钟前
【剑斩OFFER】算法的暴力美学——leetCode 946 题:验证栈序列
c++·算法·leetcode·职场和发展·结构与算法
Hey小孩18 分钟前
[个人总结] LDD3:3.字符驱动 - scull(4)
linux·驱动开发
闻缺陷则喜何志丹19 分钟前
【状态机动态规划】3686. 稳定子序列的数量|1969
c++·算法·动态规划·力扣·状态机动态规划
陈让然19 分钟前
VS Code新版本无法连接WSL ubuntu18.04
linux·运维·ubuntu
liulilittle21 分钟前
OPENPPP2 网络驱动模式
开发语言·网络·c++·网络协议·信息与通信·通信
oMcLin22 分钟前
如何在Oracle Linux 8.4上通过配置Oracle RAC集群,确保企业级数据库的高可用性与负载均衡?
linux·数据库·oracle
小杰帅气23 分钟前
神秘的环境变量和进程地址空间
linux·运维·服务器