0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

有关文件IO操作的错误(error)提示

冬至子 来源:嵌入式之入坑笔记 作者:嵌入式之入坑笔记 2023-05-20 16:31 次阅读

编程中,我们一般都是要讲究一定的使用规范的。按照一定的规范编写代码,返回运行提示,在代码运行出现问题时能方便我们能快速的定位到问题的所在。

特别是在使用库函数或者系统调用的API的时候,我们最好也要关注函数的返回值所能给我们提供的信息,充分利用好这些返回值以及返回值所代表的含义,对我们的错误查找是有很大的便利的!

本文记录一下文件IO操作时的一些错误提示,通过函数的调用之后的返回值去查找对应的问题。

有关文件IO的 errno 变量

linux系统中对于常见的错误都进行了统计,这些不同的错误已经被系统进行了编号,并且每个错误类型的编号都不一样,以此来区分不同的错误类型。

errno实际上是一个int型的全局变量,它存储的是当前执行函数所发生的错误编号,如果这个错误在被记录时没有被及时的访问,那么会被下一次发生的错误编号所覆盖掉。

但是有一点是要注意的,不是所有的库函数或者系统调用都会有错误码返回的,关于这边要去查询所调用的函数说明才能知道。比如我想知道函数 open 是否会返回错误码,那就可以使用 man 2 open 进行查看,如下:

图片

从图中可以看出,open函数在调用出现异常的时候会设置errno变量的。

C库函数 strerror( )

虽然我们知道了通过errno变量可以获取到函数调用出现错误时的错误编号。但是错误编号它只是一个数字,对于我们而言光是知道一个数字总归是差点意思的。

而我们最终是希望通过这个数字获取到有关的错误原因或者某种提示,这才是我们查找问题的好帮手啊。

这个时候我们可以考虑使用一个C库函数— strerror()。通过这个函数将我们代码中获取到的错误编码转换成对应的字符串输出,让我们能够看的明白错误是怎么回事。

strerror()函数的原型如下:

#include 


char*strerror(int errnum);



参数和返回值如下:


errnum :错误编号 errno。


返回值:对应错误编号的字符串描述信息。

比如:我调用open函数以只读的方式打开一个不存在的文件,并打印变量errno的值,然后转换成字符串输出,看看是什么效果。

代码如下:


#include


#include


#include


#include


#include


#include


#include



intmain(void)


{


char buf[1024];


int fd_src;



fd_src =open("./xxxx.txt",O_RDONLY);


if(fd_src <0)


{


printf("errno:%d Info:%s\\r\\n",errno,strerror(errno));


return-1;


}


close(fd_src);


}

运行之后的输出结果如下:

图片

从图上可以看出来,因为xxxx.txt这个文件是不存在的,用open函数的只读的方式打开的话,会返回错误编号2,通过strerror函数返回的错误信息是“No such file or directory”,说的是找不到这个文件。

当然,除了strerror函数之外,还有一个函数也是实现一样的效果的,那就是perror,这个函数会自动附加一些信息输出,可以更加方便我们输出调试查看信息!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    591

    浏览量

    27357
  • 字符串
    +关注

    关注

    1

    文章

    577

    浏览量

    20488
收藏 人收藏

    评论

    相关推荐

    文件IO操作时的常见错误

    在编程中,我们一般都是要讲究一定的使用规范的。按照一定的规范编写代码,返回运行提示,在代码运行出现问题时能方便我们能快速的定位到问题的所在。
    发表于 01-11 15:36 1195次阅读
    <b class='flag-5'>文件</b><b class='flag-5'>IO</b><b class='flag-5'>操作</b>时的常见<b class='flag-5'>错误</b>

    makefile文件出现错误提示 求解

    我在编译简单的驱动程序框架时makefile文件出现cc1: error: invalid option `abi=apcs-gnu'错误提示。大家看下怎么回事啊?makefile
    发表于 03-18 10:17

    用primace测试vhd文件提示错误的解决办法?

    Error:CMD_ERR_033: Cannot find current_design 'XZJ'! 用primace测试vhd文件提示如下错误
    发表于 06-16 09:03

    硬盘故障提示

    硬盘故障提示 (1)Date error(数据错误) 从软盘或硬盘上读取的数据存在不可修复错误,磁盘上有坏扇区和坏的文件分配
    发表于 01-08 09:37 1573次阅读

    电脑错误信息的中文解读

    电脑各种错误信息的中文意思 一、BIOS中的提示信息 提示信息 说明 Drive A error 驱动器A错误 System halt 系统
    发表于 02-11 17:32 762次下载

    Bada系统学习-错误码(Error Codes)

    of an error code下表描述了错误码的详情  Table: Error codes Error code
    发表于 04-02 14:35 548次阅读

    STM32F1的ADC2如何使用DMA功能 USART过载错误Overrun error

    STM32F1的ADC2如何使用DMA功能,USART过载错误Overrun error
    的头像 发表于 03-14 14:42 8005次阅读
    STM32F1的ADC2如何使用DMA功能 USART过载<b class='flag-5'>错误</b>Overrun <b class='flag-5'>error</b>

    【MCU】MDK错误error in include chain (cmsis_armcc.h):expected identifier or ‘(‘

    【MCU】MDK错误error in include chain (cmsis_armcc.h):expected identifier or ‘(‘
    发表于 11-30 19:51 18次下载
    【MCU】MDK<b class='flag-5'>错误</b>:<b class='flag-5'>error</b> in include chain (cmsis_armcc.h):expected identifier or ‘(‘

    Keil编译时提示“main.c(16): error C129: missing ';' before 'num'”

    Keil编译时提示“main.c(16): error C129: missing ‘;’ before ‘num’”折腾了很久才知道是前面的“typedef unsigned char u8
    发表于 12-17 18:10 16次下载
    Keil编译时<b class='flag-5'>提示</b>“main.c(16): <b class='flag-5'>error</b> C129: missing ';' before 'num'”

    error:expected identifier before ‘(‘ token,结构体指针宏定义错误

    error:expected identifier before ‘(’ token,结构体指针宏定义错误编译时弹出标题所示错误,一般为宏定义里有与其他地方重复的常量符号。找出名字重复的符号并修改
    发表于 01-13 15:42 11次下载
    <b class='flag-5'>error</b>:expected identifier before ‘(‘ token,结构体指针宏定义<b class='flag-5'>错误</b>

    Linux下文件IO相关操作

    Linux - 基础 IO 文件 IO 相关操作 stdin stdout stderr 系统文件 I/O
    发表于 08-11 11:55 488次阅读

    pip安装时 fatal error C1083 无法打开包括文件io.h” No such file or directory

    原文链接 报错 使用pip安装模块,出现错误: c:\\users\\anaconda3\\include\\pyconfig.h(68): fatal error C1083: 无法打开包括文件
    的头像 发表于 01-12 11:24 3410次阅读

    嵌入式Linux学习笔记:文件IO

    在linux中一切都叫文件,比如普通文件,设备文件,管道。在应用层,可以用一套文件IO读写文件
    发表于 06-23 14:25 266次阅读
    嵌入式Linux学习笔记:<b class='flag-5'>文件</b><b class='flag-5'>IO</b>

    a javascript error怎么修复

    修复"a javascript error"的方法可以因情况而异,但以下是一些常见的解决方法: 检查错误消息 首先,查看浏览器控制台中的错误消息。错误消息通常会提供
    的头像 发表于 11-26 14:41 4882次阅读

    linux打开文本文件命令提示错误

    Linux中打开文本文件的命令通常是使用文本编辑器打开,例如常用的命令有 vi 、 vim 、 nano 等。如果在使用其中一个命令时出现错误提示,可能有以下几种原因和解决方法。 错误
    的头像 发表于 12-22 15:10 804次阅读