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

news2024/11/18 3:38:17

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

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

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

有关文件IO的 errno 变量

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

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

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

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

C库函数 strerror( )

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

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

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

        strerror()函数的原型如下:

#include <string.h>
char *strerror(int errnum);

参数和返回值如下:
errnum :错误编号 errno。
返回值:对应错误编号的字符串描述信息。

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

        代码如下:


#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>


int main(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,这个函数会自动附加一些信息输出,可以更加方便我们输出调试查看信息!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

INTENT2022--一道包含12个反调试反虚拟机操作的ctf题解

作者&#xff1a;selph 从一道Re题学习12种反调试反虚拟技术 题目&#xff1a;AntiDebuggingEmporium 来源&#xff1a;INTENT CTF 2022 Re 这个题目很有意思&#xff0c;里面出现了总共12个反调试反虚拟机的操作&#xff0c;本文内容分两部分&#xff0c;前部分是题解&…

六西格玛奠基人之张驰染阳杂记

中招第1天&#xff1a; 上周四从外地出差回来&#xff0c;落地就觉得有点全身乏力&#xff0c;晚上开始发冷&#xff0c;预感可能中招了。大数据预测深圳第一波疫情高峰发生在12月20日&#xff0c;陆续接到深圳同事亲友中招的消息&#xff0c;感慨真是神预测。 因为头晕目眩&…

LeetCode419.甲板上的战舰

LeetCode刷题记录 文章目录&#x1f4dc;题目描述&#x1f4a1;解题思路⌨C代码&#x1f4dc;题目描述 给你一个大小为 m x n 的矩阵 board 表示甲板&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 X 或者是一个空位 . &#xff0c;返回在甲板board上放置的 战舰 的数量…

Elasticsearch 日志能否把全部请求打印出来?

1、实战问题请问一下球主&#xff0c;es怎么配置可以把请求日志都打印出来。就是不管是调用借口&#xff0c;还是kibana查询数据&#xff0c;es能打印dsl的请求日志吗&#xff1f;&#xff1f;求指导。怎么配置&#xff1f;——问题来源&#xff1a;https://t.zsxq.com/09vv8rq…

现代细胞计数分析平台丨OMIQ简介

单细胞分析&#xff0c;变得简单 OMIQ是一个现代细胞计数分析平台&#xff0c;它将机器学习和分析管道与经典手动分析的世界连接起来。它允许研究人员在一个软件中完成他们的整个工作流程&#xff0c;从原始数据到统计意义&#xff0c;使用他们自己的专业知识和熟悉的工具与数…

java养老系统养老院系统养老院网站源码

简介 本系统是养老院系统&#xff0c;主要是老人入住养老院的业务逻辑&#xff0c;有护工和医生对老人进行护理看病记录等信息管理&#xff0c;缴费入住外出记录管理等。 演示视频 https://www.bilibili.com/video/BV18i4y1Z7je/?share_sourcecopy_web&vd_sourceed0f04fb…

2022(核酸年)结束了

目录2022目标回顾2022生活回顾2023目标祝词现在是北京时间2022-12-30 15:08&#xff0c;再有一天2022就结束了&#xff0c;岁月催人老啊&#xff01;同样又到了一年一度总结的时候了&#xff0c;我清楚记得在 2021年度总结中定下了我的今年目标&#xff0c;即如此那我们一同看看…

strcmp(),strcat(),strcpy()函数复习与模拟实现

tips 1. 与--都是有副作用的&#xff0c;而有关于位的运算都是没有副作用的。 既然是与字符串有关的函数&#xff0c;不得不提一下&#xff1a;\0是字符串结束符&#xff0c;对应到ascll表里面是空字符NULL&#xff0c;对应的ACSLL码为0. 1. 字符串许多函数的操作与\0有些密…

剩余电流继电器在大型游乐场所中的应用探讨

【摘要】游乐场所中大型游乐设备的运转离不开电力系统的支持&#xff0c;例如受到小朋友们欢迎的观光火车&#xff0c;自控飞机&#xff0c;豪华转马等。目前许多游乐经营者在安全用电方面的意识还比较薄弱&#xff0c;存在一定的游乐安全隐患&#xff0c;本文就剩余电流继电器…

机器学习笔记之Sigmoid信念网络(三)KL散度角度观察醒眠算法

机器学习笔记之Sigmoid信念网络——KL散度角度观察醒眠算法引言回顾&#xff1a; 醒眠算法过程KL Divergence\text{KL Divergence}KL Divergence观察醒眠算法引言 上一节介绍了MCMC以及平均场理论变分推断方法的弊端并介绍了醒眠算法(Weak-Sleep Algorithm)。本节将介绍从KL散…

ThinkPHP历史漏洞

文章目录ThinkPHP简介Thinkphp历史漏洞Thinkphp 2.x 任意代码执行漏洞漏洞描述影响版本漏洞复现Thinkphp5.0.23远程代码执行漏洞(CVE-2018-20062)漏洞描述影响版本漏洞复现ThinkPHP 5.0.x 未开启强制路由导致的RCE 漏洞分析(CNVD-2018-24942)漏洞描述影响版本漏洞复现ThinkPHP简…

2023元旦假期值得关注的空投与埋伏任务

不知不觉2023年元旦即将到来&#xff0c;这也是十一国庆之后大家迎来的第一次小假期&#xff0c;相信不少人已经开始“家里蹲”计划&#xff0c;不少项目方也最近搞了一些空投任务&#xff0c;刚好趁此时间也能刷空投&#xff0c;获得意外惊喜&#xff0c;这里我们为大家总结最…

【redis有序集合操作】

【zcount&#xff1a;统计有序集合分数区间内的成员数量】 zadd user_login 1 one zadd user_login 3 two zadd user_login 4 three zadd user_login 5 four ZCOUNT 返回有序集 key 中&#xff0c; score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量…

socket套接字

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 socket套接字1. 什么是socket套接字2. socket编程3. 网络字节序4. IP地址转换函数5. sockaddr数据结构…

【答学员问】服务器上安装好LAMP架构,部署wordpress之后网页端无法访问

文章目录问题反馈问题排查1. 首先是IP&#xff1a; 确认无误&#xff1a;2. 安装一下 php看看是否安装&#xff1a;3. 最后测试PHP是否能够解析再次沟通分析整理列清单排查测试过程1. 上传包解压2. 安装好LAMP架构并测试是否支持php3. 测试是否可以访问wordpress4. 查看日志排查…

Maven是怎么样构建Spring Boot项目的?

准备好项目运行所需的环境后&#xff0c;就可以使用IDEA开发工具搭建一个Spring Boot入门程序了。我们既可以使用Maven方式构建项目&#xff0c;也可以使用Spring Initializr快捷方式构建项目。这里先介绍如何使用Maven方式构建Spring Boot项目&#xff0c;具体步骤如下。 1.初…

SpringBoot+VUE前后端分离项目学习笔记 - 【06 SpringBoot集成Mybatis实现数据查询】

配置文件改成yaml格式&#xff1a; application.yml server:port: 9090spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/joyce?serverTimezoneGMT%2b8username: rootpassword: 123456写基本的功能来验证后台数据查询功能 …

了解初级测试人员从测试自动化开始需要什么?

文章目录 前言 将测试自动化视为软件开发 选择一种编程语言开始 学习干净的代码实践和原则 了解自动化中有用的设计模式 学习干净的代码实践和原则 学习网络工作原理的基础知识 选择一个 UI 自动化工具开始 了解 HTTP 协议以及如何自动化 API 测试 熟悉数据库基础知识…

React 配置文件(三)配置本地IP地址和端口号

1.在环境变量中配置好对应IP地址和端口号,拿UAT来举例 2.在config-overrides.js中配置域名和端口号 3.在package.json中配置好启动脚本 "scripts": { "start": "react-app-rewired start", "uat": "dotenv -e .env.uat react-app…

Android之蚂蚁森林能量水滴效果

最近公司有个需求&#xff0c;需要一个类似于蚂蚁森林能量水滴浮动效果&#xff0c;所以有了这篇文章&#xff0c;目前在项目里&#xff0c;没时间提出来做demo&#xff0c;有代码欠缺的地方欢迎指出&#xff0c;一定补上。 文章目录一&#xff1a;效果图二&#xff1a;具体实现…