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

相关推荐
为何创造硅基生物6 分钟前
独占指针的创建std::make_unique 本身自带堆出现
c++
kyle~18 分钟前
ROS 2 与 Isaac Sim 联合仿真(一)体系架构、环境选型与基础通信闭环
c++·机器人·nvidia·仿真·ros2
努力努力再努力wz39 分钟前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
J2虾虾1 小时前
C 语言 void 完全用法
c语言·开发语言
八解毒剂1 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
wu_ye_m1 小时前
学习c语言第35天 函数声明和定义
c语言·开发语言·学习
Jurio.1 小时前
开源 Codex Sticky:在终端 Codex CLI 长对话中始终固定底部输入框
linux·rust·github·开源软件·codex·codex cli
无足鸟ICT1 小时前
【RHCA+】撤销和恢复撤销快捷键
linux
起床困难户5751 小时前
条款20:协助完成返回值优化
c++
质造者1 小时前
LangChain + Ollama + Tavily 实现旅游问答系统
linux·人工智能·python·langchain·rag