写给初学者的linuxerrno错误码机制

写给初学者的Linux errno错误码机制

作为Linux系统开发或运维工作中不可或缺的一部分,errno错误码机制是初学者难以回避的知识点。本文将从errno概念和常见的错误码、errno与系统调用、errno如何获取和处理以及相关的系统工具和资源等几个方面详细介绍Linux errno错误码机制,希望能为初学者提供参考和帮助。

errno概念和常见错误码

errno是一个全局变量,用于记录当前操作系统调用(如读写文件、创建进程等)返回的错误码。在C语言中,errno通常使用一个特殊的宏"errno.h"来声明和定义,并包含了一组预定义的错误码。

常见的errno错误码有:

  • EACCES:没有足够的权限进行操作
  • EEXIST:文件已经存在
  • EINTR:操作被挂起,如Crtl+C键被按下等
  • EINVAL:参数不合法
  • ENOENT:文件或目录不存在
  • ENOMEM:内存不足

errno与系统调用

系统调用是操作系统和应用程序之间的桥梁。在Linux系统中,所有的操作都是通过系统调用来实现的。一旦系统调用失败,就会返回一个errno错误码,这时候应该根据返回值来判断系统调用是否成功。

以打开文件为例,可以使用系统调用open()来打开一个文件。通常来说,如果open()系统调用成功,它将返回一个文件描述符fd;否则,将返回-1并设置errno错误码。

#include <fcntl.h> //头文件用于open系统调用
int fd = open("file.txt", O_RDONLY);
if(fd == -1) {
    perror("open error");
    exit(1);
}

这里出现了一个新的函数perror(),用于将最后一次发生的错误输出到标准输出。出于错误处理的需要,通常应该在发生系统调用错误的时候使用perror()函数输出相关的错误信息。

errno获取和处理

errno可以通过变量errno来获取。它是一个全局变量,因此不需要参数也可以访问。errno在使用之前应该先将它初始化为0,然后可以使用它来检查相应的错误信息。

#include <errno.h>
errno = 0;
if (somefunc() == -1) {
    if (errno == ENOENT) {
        printf("Error: file does not exist");
    } else {
        printf("Error: some other error");
    }
}

系统工具和资源

对于初学者,应该使用系统提供的工具和资源来了解errno错误码机制。

系统资源:

  • "man errno":错误码列表和含义的手册页
  • "man 2 intro":一个介绍系统调用的手册页
  • 头文件"errno.h":声明和定义全局变量errno和预定义错误码

系统工具:

  • perror:将指定的errno错误码转换为人类可读的错误消息
  • strerror:将指定的errno错误码转换为字符串形式的错误消息

如何使用perror工具:

$ perror 2
OS error code   2:  No such file or directory

如何使用strerror工具:

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

int main(void) {
    fprintf(stderr, "Value of errno: %d\n", errno);
    perror("Error printed by perror");
    fprintf(stderr, "Error opening file: %s\n", strerror(errno));
    return 0;
}

本文介绍了errno错误码的概念、常见错误码、errno与系统调用的关系、errno的获取和处理以及相应的系统工具和资源。学好errno错误码机制将有助于我们进行系统开发和日常运维工作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:写给初学者的linuxerrno错误码机制 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • 如何解决电脑选择关机但又重新启动的问题

    如何解决电脑选择“关机”但又重新启动的问题? 当我们选择关机时,电脑却又自动重启,这可能会让我们感到烦恼。这种问题会被 操作系统的故障 硬件电源管理的问题 两个方面引起。下面我们将讨论这些原因以及如何解决这些问题。 操作系统故障 1. 禁用“自动重启” 在某些情况下,Windows系统可能会自动重新启动,例如在更新安装完成后或者系统出现故障时。为了防止重启,…

    other 2023年6月27日
    00
  • Android自定义ViewGroup实现堆叠头像的点赞Layout

    下面我将详细讲解“Android自定义ViewGroup实现堆叠头像的点赞Layout”的完整攻略。 1. 确定需求和设计 首先,我们需要明确项目需求和设计,该自定义ViewGroup主要用于实现堆叠头像的点赞Layout。设计思路如下: 头像图片使用圆形显示; 头像图片堆叠在一起,最上面的头像显示在最底下的头像上方; 当有新用户点赞时,新用户的头像会自动堆…

    other 2023年6月25日
    00
  • 小米路由器AX9000开发者版本怎么体验Docker功能?

    下面是详细的攻略: 前置条件 具有 Docker 使用基础 已经购买了小米路由器 AX9000 开发者版本 步骤 1. 连接路由器 首先,使用浏览器连接到小米路由器的管理页面,在登陆之后,确保路由器的系统和所有应用程序都是最新版本。 2. 开启 SSH 功能 在路由器管理页面,点击“我的应用”,然后在左侧菜单栏选择“开发者”,找到 SSH 功能,确保开启。 …

    other 2023年6月26日
    00
  • Android音视频开发之MediaCodec的使用教程

    下面就是对题目《Android音视频开发之MediaCodec的使用教程》的详细讲解攻略。 一、什么是MediaCodec MediaCodec是Android SDK提供的一个非常重要的音视频编解码API。使用MediaCodec API可以完成音视频编码、解码的功能,其中不仅包含基于软编、硬编两种方式的编码,还有对应的软解、硬解方式的解码。在Androi…

    other 2023年6月27日
    00
  • 微信公众号开发者账号该怎么申请?

    要申请微信公众号开发者账号,步骤如下: 1. 进入微信公众平台官网 在浏览器中输入 https://mp.weixin.qq.com 并进入微信公众平台官网。 2. 注册微信公众号开发者账号 在微信公众平台官网首页,点击“注册”,进入注册页面。填写邮箱、手机号等相关信息并进行人机验证,最后点击“注册”。 3. 登录微信公众号开发者账号 注册完成后,使用已注册…

    other 2023年6月26日
    00
  • 【译】优雅的停止docker容器

    【译】优雅的停止docker容器 在使用Docker时,我们经常需要停止容器。但是,如果我们直接使用docker stop命令停止容器,可能会导致数据丢失或其他问题。本攻略将介绍如何优雅地停止Docker容器,以避免这些问题。 优雅地停止Docker容器 优雅地停止Docker容器的过程包括以下步骤: 向容器发送SIGTERM信号,让容器有机会进行清理和保存…

    other 2023年5月7日
    00
  • 小程序实现自定义导航栏适配完美版

    下面我将详细讲解“小程序实现自定义导航栏适配完美版”的完整攻略。 1. 为什么需要自定义导航栏? 小程序默认的导航栏风格相对单调,一般为白色背景、黑色字体。而一些应用场景需要体验更好的界面设计,这时候就需要对小程序的导航栏进行自定义。 2. 自定义导航栏的方法 2.1 使用第三方组件库 市面上有许多 UI 组件库,如 Vant、WeUI 等,都包含了自定义导…

    other 2023年6月25日
    00
  • win10无限重启按f2怎么办 win10无限重启按f2解决方法

    win10无限重启按f2怎么办? 在 Win10 电脑随时出现无限重启按 F2 的情况下,用户可以按照以下步骤来解决: 步骤1:禁用自动重启 首先,进入 Windows 10 启动界面,按下 Shift 键并同时点击“重启”选项,然后选择“故障排除”>“高级选项”>“启动设置”>“重启”> 按“5”或点击“进入安全模式” 进入安全模式…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部