1. 简介
很多系统函数在错误返回时将错误原因记录在libc
定义的全局变量errno
中,每种错误原因对应一个错误码。
errno
在头文件errno.h
中声明,是一个整型变量,所有错误码都是正整数。然后我们可以用perror
或
strerror
函数将errno
解释成字符串
perror
#include <stdio.h>
void perror(const char *s);
基于errno的当前值,在标准出错上产生一条出错信息,然后返回。它首先输出由msg指向的字符串,然后是一个冒号,一个空格,接着是对应于errno值的出错信息,最后是一个换行符。
strerror
#include <string.h>
char *strerror(int errnum);
将errnum(它通常就说errno值)映射为一个出错信息字符串,并返回此字符串的指针。
perror是将errno对应的错误消息的字符串打印到标准错误输出上,即stderr或2上,若你的程序将标准错误输出重定向到/dev/null,那就看不到了,就不能用perror了。而 strerror的作用只是
将errno对应的错误消息字符串返回,要怎样处理完全由你自己决定。通常我们选择把错误消息保存到日志文件中,即写文件,所以通常可以用fprintf(fp, "%s", strerror(errno))将错误消息打印
到fp指向的文件中。其中perror中errno对应的错误消息集合跟strerror是一样的,也就是说不会漏掉某些错误。
#include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> int main() { int fd = 111111; int ret = 0; if((ret = close(fd)) == -1) { perror("close error"); fprintf(stderr,"close error msg is :%s\n",strerror(errno)); printf("close error msg is :%s\n",strerror(errno)); } return 0; }
参考:http://www.cnblogs.com/zjfdbz/archive/2012/12/16/2821061.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理