1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

我们大多都使用printf来打印一些信息,其它的接口都比较少用。这里介绍一个被我们遗忘的打印输出函数:perror函数

perror函数简介

perror(s) 用来将上一个函数发生错误的原因输出到标准设备(stderr)。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno的值来决定要输出的字符串。

在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信息和errno所对应的错误一起输出。

下面通过例子看一下使用printf与使用perror的区别:

(1)使用printf的例子:

/* 微信公众号:嵌入式大杂烩 */
#include<stdio.h>int main(void)
{FILE *fp;fp = fopen("/home/book/test_file", "r+");if (NULL == fp){printf("fopen error!\n");}return 0;
}

此时,我们本地的/home/book/路径下并没有test_file文件,编译运行就会输出错误信息:

(2)使用perror的例子:

#include<stdio.h>
#include <errno.h>
#include <string.h>int main(void)
{FILE *fp;fp = fopen("/home/book/test_file","r+");if (NULL == fp){perror("fopen error");}return 0;
}

同上,编译运行。此时会输出错误信息:

可以看到,使用perror能多输出点详细信息。

前面说了,错误原因依照全局变量errno中。换句话说就是一些全局变量errno保存的就是一些错误代码。我们可以看到在一些比较系统的代码/工程中,常常会设计一些错误代码,方便统一管理。

在Linux内核(我这里的内核版本是4.9.88)中,这些系统错误代码在文件 include/uapi/asm-generic/errno-base.hinclude/uapi/asm-generic/errno.h 中:

这些错误代码后面有一些描述注释,这些描述也不仅仅是作为注释使用,也有与这些错误代码建立一一对应的字符串输出关系,比如:

所以才有了上例的No such file or directory的输出。

除此之外,我们也可以不去阅读代码,而是通过 errno 工具来查询这些错误代码及描述。

我们可以输入errno命令看看有没有errno工具,如果没有,则会提示安装:

使用errno -l命令查看系统错误代码及描述:

以上就是本次的分享,如有错误,欢迎指出!谢谢


猜你喜欢

从串口驱动到Linux驱动模型

串口打印知多少?

1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!


C语言 | perror函数使用详解相关推荐

  1. c语言 is函数,关于C语言回调函数的详解~

    原标题:关于C语言回调函数的详解~ 01 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义.我在百度上搜了一下, ...

  2. c语言while函数作用,详解C语言中的while语句

    什么是C语言的while语句?它的作用是什么呢?估计很多初学者对此都是一知半解.下面课课家笔者就为大家详细解释C语言中的while语句的含义和作用. 首先笔者先给大家介绍C语言中的共有的三大常用的程序 ...

  3. c语言fclose函数作用,详解C语言中freopen()函数和fclose()函数的用法

    C语言freopen()函数:打开文件函数,并获得文件句柄 头文件: #include 定义函数: FILE * freopen(const char * path,const char * mode ...

  4. c语言复杂函数转换,详解C语言常用的一些转换工具函数.pdf

    详详解解C语语言言常常用用的的一一些些转转换换工工具具函函数数 1..字字符符串串转转十十六六进进制制 代码实现: void StrToHex(char *pbDest, char *pbSrc, i ...

  5. c语言main函数参数详解,c/c++程序main函数参数解析,以及参数传递的不同方法

    1. 程序运行时传递参数的不同方法: 1)通过命令参数传递参数: 2) 通过txt文件读取参数. 2. 方法举例 1)通过命令参数传递参数,即解析main函数的参数. main函数可以不带参数,也可以 ...

  6. C语言main函数参数详解

    main函数参数 一共有三个: 1.int argc 整型变量 2.char *argv[] 字符指针的数组,通俗一点就是字符串数组,每个元素都是字符串 3.char *envp[] 字符串数组 这三 ...

  7. puts函数,C语言puts函数用法详解

    前面在输出字符串时都使用printf,通过"%s"输出字符串.其实还有更简单的方法,就是使用 puts() 函数.该函数的原型为: # include <stdio.h> ...

  8. R语言axis函数参数详解(坐标轴函数)

    首先我们来看一下函数帮助文档所给定的axis函数参数: axis(side, at = NULL, labels = TRUE, tick = TRUE, line = NA,pos = NA, ou ...

  9. c语言fopen函数的作用是,C语言 fopen函数 参数详解

    文件打开函数fopenfopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,"文件指针名"必须是被说明为FILE 类型的指针变 ...

最新文章

  1. 基于ARMv8的固件系统体系结构
  2. 安卓Design包之AppBar和Toolbar的联用
  3. 人类为什么会同情机器人,是否需要禁止虐待机器人
  4. vue-cli3打包注意路径的问题
  5. 软件的Express Edition是什么版?
  6. Centos7-卸载自带的jdk 安装jdk8
  7. 升级换代!Facebook全新电商搜索系统Que2Search
  8. oracle登录页面错误,php和oracle的页面登录问题
  9. 禅道项目管理工具环境搭建
  10. 机器学习实战之KNN实现mnist手写数字分类
  11. face_landmarks
  12. matlab圆孔孔壁应力集中,matlab 有限元分析平面问题的小孔应力集中问题的程序 - 下载 - 搜珍网...
  13. 【HTML】讲讲对HTML5的语义化的理解
  14. linux操作系统共有几种版本
  15. 公司 邮件 翻译 培训 长难句 13
  16. 如何用photoshop输出html网页(转)
  17. 我把视频变成链接_如何把长链接变成短链接?3个工具帮你实现
  18. 树莓派html5播放器,QT+树莓派实现一个简单的播放器
  19. html css小圆圈,jquery+css3实现会动的小圆圈效果
  20. 华为鸿蒙os3.0评测,华为鸿蒙OS威力初显!实测体验比EMUI更好 功耗却更低 惊喜还有很多...

热门文章

  1. Somebody I can kiss CSU - 1119(搜索)
  2. 征文 | 国产数据库四朵金花之南大通用
  3. Mybatis实现增删改查
  4. AP8105 DC/DC 升压 外围简单 电子词典驱动
  5. shiro学习笔记(三)知识整合
  6. LeetCode 链表的回文结构
  7. 实施工程师具备的专业技能
  8. linux 安装安全狗
  9. critic法计算_强化学习(Reinforcement learning)中Actor-Critic算法该如何深入理解?...
  10. SPSS 方差分析 两因素 无交互项