首先简单说一下file descriptors(文件描述符):
file descriptor 0是standard input (stdin标准输入)
file descriptor 1 是 standard output (stdout标准输出)
file descriptor 2 是 standard error output(stderr标准错误输出)

perror()原型:

#include <stdio.h>
void perror(const char *msg);
//它是基于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是一样的,也就是说不会漏掉某些错误。

让我们来模拟一种错误情况,尝试打开一个不存在的文件。您可以使用多种方式来输出错误消息,在这里我们使用函数来演示用法。另外有一点需要注意,您应该使用 stderr 文件流来输出所有的错误。

#include <stdio.h>
#include <errno.h>
#include <string.h>extern int errno ;int main ()
{FILE * pf;int errnum;pf = fopen ("unexist.txt", "rb");if (pf == NULL){errnum = errno;fprintf(stderr, "Value of errno: %d\n", errno);perror("Error printed by perror");fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));}else{fclose (pf);}return 0;
}

执行结果

Value of errno: 2
Error printed by perror: No such file or directory
Error opening file: No such file or directory

strerror()方法与perror()的用法十分相似。

先谈谈perror()的用法,这个方法用于将上一条语句(方法)执行后的错误打印到标准输出上。一般情况下(没有使用重定向的话),就是输出到控制台上。

但是,如果我需要了解另外一个进程的某一个方法执行的错误,或者更briefly,我就希望将错误打印到一个文件里面,perror()就不太合适了!

为了实现我刚刚说到的要求,我们首先要将错误放到一个字符串里面。这个时候,strerror()就合适了!

strerror(errno)

首先,系统会根据上一条语句的执行错误情况,将errno赋值.。关于这点,我们首先明白两点。第一,errno是一个系统变量,是不需要我们赋值或者声明的。第二,errno是一个int类型的变量,而且其中的值对应一种特定错误类型
然后,关于streorror()本身,可以这么理解。顾名思义,streorror=string+error,就是将errno值翻译成描述错误类型的string语句!

感谢此博文的文章

资料来自于博客整理,若有侵权,请联系博主删除=.

perror()函数 strerror()函数 详解相关推荐

  1. pthread_create函数的详细讲解(包括向线程函数传递参数详解)

    pthread_create是UNIX环境创建线程函数 头文件 #include<pthread.h> 函数声明 int pthread_create(pthread_t*restrict ...

  2. 利用栈求表达式的值_高一数学月考考点之函数的表达式详解

    函数表达式考点详解,教你轻松学函数 Hello,大家好,这里是摆渡学涯.很高兴在这里跟大家分享知识哦.这次课程我们来为大家讲一下函数表达式相关的考点,教你轻松学函数. 基本概念 什么是函数表达式呢?我 ...

  3. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  4. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  5. countif和sum套用_if函数嵌套countif、sumif函数实例操作详解 你需要学习了

    excel中if函数嵌套countif函数实例操作详解,需要了解if函数.countif函数.sumif函数字符串引用方式,isblank函数 操作方法 01 用扫描枪连接excel后将自动将货物名称 ...

  6. php函数find的用法,c语言find函数的用法详解

    c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...

  7. python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  8. python代码大全表解释-python操作列表的函数使用代码详解

    python的列表很重要,学习到后面你会发现使用的地方真的太多了.最近在写一些小项目时经常用到列表,有时其中的方法还会忘哎! 所以为了复习写下了这篇博客,大家也可以来学习一下,应该比较全面和详细了 列 ...

  9. 函数中{}输出格式详解(C#)

    Console.WriteLine()函数中{}输出格式详解(C#) Console.WriteLine()函数的格式一直没怎么注意.今天同事问起Console.WriteLine({0:D3},a) ...

  10. java string()函数_转载java String.split()函数的用法详解

    转载java String.split()函数的用法详解 如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!在java.lang包中有String.split()方法的原型是: p ...

最新文章

  1. linux恢复出厂设置_怎么恢复tp-link路由器出厂设置 恢复tp-link出厂设置方法【详解】...
  2. 领航商务之选——金立M5 plus体验札记
  3. Security Wheel 安全环
  4. GPU Gems 3
  5. java drawimage 参数_小程序中canvas的drawImage方法参数使用详解
  6. Wing IDE 5.0 破解之寻找注册码
  7. μC/OS-II硬件软件体系结构
  8. ArcGIS API + Echarts 实现动态雷达图
  9. python多线程结束线程_Python线程– Python多线程
  10. Asp.Net Web API(一)
  11. 全网首发:明明已安装也存在,报错找不到lualib.h
  12. mysql sql常用语句大全
  13. 银行考试打字测试软件,银行考核打字,是否有什么练习软件?
  14. Unity2019配置ARCore环境
  15. 二叉树的深度遍历和广度遍历
  16. 微信公号DIY:训练微信聊天机器人公号变身图片上传工具
  17. 寒假大一2.15考试
  18. 在家也能健身(05):腹肌
  19. ConcurrentLinkedQueue使用和方法介绍
  20. 基于opencv库对图像进行平移,旋转以及翻转

热门文章

  1. Ristretto Hardware-Oriented Approximation of Convolutional Neural Networks
  2. 亚马逊FBA相关术语介绍
  3. Java程序:停车场计费
  4. 禁用vmware虚拟机自动挂起功能
  5. 怎么样在腾讯云服务器桌面环境安装
  6. 数字孪生技术海上风电场解决方案
  7. Unity FACEGOOD Audio2Face 通过音频驱动面部BlendShape
  8. 初中数学教师资格证考试成功通过前辈复习经验分享
  9. 将xlsx内容转成json
  10. 【UE4】【笔记】7、照明阴影和后期处理