strerror函数详解之【错误码探秘】

news2024/12/27 0:30:47

目录

一,strerror函数简介

二,strerror函数的基本用法

三,errno变量


一,strerror函数简介

当程序出现错误时,了解错误的具体信息对于调试和修复问题至关重要。在C语言中,我们可以使用strerror函数来获取与指定错误码相对应的错误消息字符串

🌴函数头文件: 

#include <string.h>
#include <errno.h>

🌴函数原型:

char * strerror ( int errnum );

其中,errnum参数是一个表示错误码的整数值,strerror函数会返回一个指向错误消息字符串的指针

 🌴函数返回值:

strerror函数的返回值是一个指向错误消息字符串的指针。这个指针指向的字符串通常是一个静态的字符串常量,因此不应该尝试修改它。 

二,strerror函数的基本用法

🍂假设我们要打开一个不存在的文件,并处理打开文件失败的错误,示例如下:

#include <stdio.h>
#include <string.h>
#include <errno.h>

//fopen以读的形式打开文件
//如果文件存在,打开成功
//如果文件不存在,打开失败
int main()
{
	FILE* fp = fopen("test.txt", "r");
	if (fp == NULL)
	{
        int errnum = errno;
		printf("打开文件失败,原因是:%s\n", strerror(errno));
	}
	else
	{
		printf("打开文件成功\n");
	}

	return 0;
}

 🍂运行结果:

🍂分析: 

  • 在上述示例中,我们尝试打开一个名为“test.txt”的文件。由于该文件不存在,fopen函数会返回一个NULL指针,并设置errno变量以指示错误。
  • 在if语句中,我们检查fp指针是否为NULL。如果是,我们使用strerror函数获取错误消息字符串,并将其打印到控制台上。如果不是,就输出“打开文件成功”。
  • 在这个示例中,strerror函数的作用是将errno变量中存储的错误码转换为可读的错误消息字符串,通过这个字符串,我们可以更好的理解错误的原因,并采取相应的措施。

三,errno变量

  • errno变量是一个全局变量,用于存储最近一次系统调用的错误码。
  • 当系统调用失败时,它会设置errno变量并返回一个特殊的返回值,以指示错误的类型。我们可以使用errno变量来获取错误码,并使用strerror函数将其转换为错误消息字符串。
  • 需要注意的是,errno变量是一个线程本地存储的变量,不同的线程之间的errno变量是独立的。因此,在多线程程序中,需要小心处理errno变量的使用。
  • errno的取值和含义是由操作系统和C标准库定义的,下面是一些常见的errno错误码及其含义:

1. EACCES:权限被拒绝。表示试图访问一个没有权限的文件或目录。

2. EEXIST:文件已经存在。通常用于创建文件时,指定了已经存在的文件名。

3. EINVAL:无效的参数。表示传递给函数的参数不合法或无效。

4. ENOENT:没有这样的文件或目录。表示指定的文件或目录不存在。

5. ENOMEM:内存不足。表示系统内存不足,无法满足程序的内存分配请求。

6. EIO:I/O错误。表示发生了一个输入/输出错误,可能是由于设备故障或其他原因。

7. EAGAIN:资源暂时不可用。通常用于非阻塞I/O操作,资源当前不可用,但稍后可能可用。

8. EINTR:被中断的系统调用。表示系统调用被信号中断,通常在使用信号处理器时会遇到。

9. EFAULT:错误的地址。表示传递给系统调用的地址参数无效。

10. ENOSPC:没有空间。表示磁盘空间不足,无法执行写操作。

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

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

相关文章

electron 内部api capturePage实现webview截图

官方文档 .capturePage([rect]) rect Rectangle (可选) - 要捕获的页面区域。 返回 Promise - 完成后返回一个NativeImage 在 rect内捕获页面的快照。 省略 rect 将捕获整个可见页面。 async function cap(){ let image await webviewRef.value.capturePage() console.log(im…

PowerPoint to HTML5 SDK Crack

Convert PowerPoint to HTML5 Retaining Animations, Transitions, Hyperlinks, Smartart, Triggers and other multimedia effects World’s first and industry best technology for building web/mobile based interactive presentations directly from PowerPoint – that …

法治智能起航 | 拓世法宝AI智慧政务一体机重塑法治格局,开启智能司法新篇章

在科技的巨轮推动下&#xff0c;我们的社会正快速迈向一个以数据和智能为核心的新时代。在这个波澜壮阔的变革中&#xff0c;人工智能&#xff08;AI&#xff09;显得尤为突出&#xff0c;它不仅是科技进步的象征&#xff0c;更是未来发展的助力者。 2023年&#xff0c;最高人…

Vue3-ref函数、reactive函数的响应式

Vue3-ref函数、reactive函数的响应式 在这之前&#xff0c;先讲Vue2的响应式处理 Vue2原本使用的是Object.defineProperty的响应式处理方式 methods方法中的this.name指的是vm.namereturn的name属性在通过this.name的间接调用时&#xff0c;通过了Object.defineProperty响应式…

体力属性在重生奇迹MU中的演变史

我相信&#xff0c;在任何一个网络游戏中都有体力这种属性&#xff0c;它本身就是血量的另一种表达&#xff0c;先天体力有优势的职业&#xff0c;往往就是后期成长较高&#xff0c;这已经是网游中一种常态&#xff0c;因为高血在PK中占据优势&#xff01;重生奇迹MU同样如此&a…

Windows下Python及Anaconda的安装与设置之保姆指南

学习Python编程需要安装基本的开发环境。 &#xff08;1&#xff09;python ——编译器&#xff1b;这个是任何语言都需要的&#xff1b;必需&#xff01; &#xff08;2&#xff09;Anaconda ——主要的辅助工具&#xff0c;号称是 Python‘OS&#xff1b;必需&#xff01; …

网络安全基础之php开发文件下载的实现

前言 php是网络安全学习里必不可少的一环&#xff0c;简单理解php的开发环节能更好的帮助我们去学习php以及其他语言的web漏洞原理 正文 在正常的开发中&#xff0c;文件下载的功能是必不可少&#xff0c;比如我们在论坛看到好看图片好听的歌时&#xff0c;将其下载下来时就…

【Python小练手】使用PySimpleGUI和Pygame创作一个MP3播放器(附完整代码)

文章目录 前言一、来说说思路&#xff08;文心一言提供&#xff09;二、完整代码&#xff08;参考文心&#xff0c;自行修改&#xff09;总结附录 前言 闲来无事&#xff0c;做了MP3播放器练练手&#xff0c;主要是研究下PySimpleGUI的界面窗口设计。先上图&#xff0c;一睹为…

C字符函数及字符串函数

但行前路&#xff0c;莫问归期 要注意的是&#xff0c;要使用下边所讲的函数要包含头文件<string.h> strlen 求字符串的长度 函数参数&#xff1a;字符串指针 函数功能&#xff1a;传入字符串指针&#xff0c;字符串是以\0为结束标志&#xff0c;返回的类型size_t其实…

Linux操作系统使用及C高级编程-D2软件包管理

有两种类型的软件包&#xff1a;二进制软件包(deb)和源码包(deb-src) 二进制软件包(Binary Packages)&#xff1a;包含可执行文件、库文件、配置文件、main/info页面、版权声明和其他文档 源码包(Source Packages)&#xff1a;包含软件源代码、版本修改说明、构建指令及编译工…

企业如何解决被“薅羊毛”

随着互联网的普及和电子商务的兴起&#xff0c;越来越多的消费者选择在线购物。然而&#xff0c;一些消费者可能会利用企业的促销活动或优惠券来获取额外优惠&#xff0c;甚至恶意攻击企业的营销资金。这种行为被形象地称为“薅羊毛”。 对于企业而言&#xff0c;如何解决被“薅…

AI系统ChatGPT源码+详细搭建部署教程+AI绘画系统+支持GPT4.0+Midjourney绘画+已支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

作用域插槽slot-scope

一般用于组件封装&#xff0c;将使用props传入组件的数据再次调出来或者单纯调用组件中的数据。也可用于为组件某个部分自定义样式以及为某次使用组件自定义样式。 直接拿elementui的el-table举例&#xff1a; <template><el-table v-loading"loading&q…

PDF Expert for mac(专业pdf编辑器)苹果电脑

PDF Expert for Mac 是一款功能强大、界面简洁的PDF阅读、编辑和转换工具&#xff0c;为Mac用户提供了全面而便捷的PDF处理体验。无论是日常工作中的文档阅读、标注&#xff0c;还是专业需求下的编辑、转换&#xff0c;PDF Expert 都能满足您的各种需求。 首先&#xff0c;PDF…

Leetcode-94 二叉树的中序遍历

递归实现 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

RustRover里使用AI通义灵码来写代码

AI通义灵码我选择RustRover里的 plugin进行下载使用 然后我们就提问好了&#xff1a;让他用c语言写一个冒泡排序程序 #include <stdio.h>void bubble_sort(int arr[], int size) {int i, j, temp;for (i 0; i < size - 1; i) {for (j 0; j < size - i - 1; j) {i…

RabbitMQ 之 Work Queues 工作队列

目录 一、轮训分发消息 1、抽取工具类 2、启动两个工作线程 3、生产者代码 4、结果展示 二、消息应答 1、概念 2、自动应答 3、消息应答的方法 4、Multiple 的解释 5、消息自动重新入队 6、消息手动应答代码 &#xff08;1&#xff09;生产者 &#xff08;2&#…

【CodeTop】TOP 100 刷题 1-10

文章目录 1. 无重复字符的最长子串题目描述代码与思路 2. 反转链表题目描述代码与解题思路 3. LRU 缓存题目描述代码与解题思路 4. 数组中的第K个最大元素题目描述代码与解题思路 5. K 个一组翻转链表题目描述代码与解题思路 6. 三数之和题目描述代码与解题思路 7. 最大子数组和…

Edge浏览器新建标签页如何更改为指定网址

Edge浏览器新建标签页如何更改为指定网址&#xff1f; 启动时新建标签页 不是说启动时&#xff0c;而是加号新建标签页时候 启动时 新建标签页 New Tab Changer 可以了 如果没有需要应用商店下载 参考文章

Qframework 中超级方便的kitres

using QFramework; using System.Collections; using System.Collections.Generic; using UnityEngine;public class TestResKit : MonoBehaviour {ResLoader mResLoader ResLoader.Allocate();private void Awake(){}/// <summary>/// 每一个需要加载资源的单元(脚本,界…