news 2026/2/7 1:26:08

Linux应用编程 - errno、perror()、strerror(errno)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux应用编程 - errno、perror()、strerror(errno)

目录

一、errno、perror()、strerror(errno)

二、实例

1、errno

2、perror()

3、strerror(errno)


一、errno、perror()、strerror(errno)


Linux中,errno用于存储系统调用的错误码。
定义和用途
  1. errno是一个预定义的外部整型(int)变量,通常包含在头文件中;
  2. 当系统调用或库函数发生错误时,它们通常会设置errno以指示发生了哪种错误;
  3. errno的值仅在函数失败时才会被设置,并且会覆盖之前的值;
  4. 通过检查errno的值,程序员可以确定发生了什么错误,并据此编写适当的错误处理代码;
路径:kernel/include/uapi/asm-generic/errno-base.h
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ #ifndef _ASM_GENERIC_ERRNO_BASE_H #define _ASM_GENERIC_ERRNO_BASE_H #define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #define ESRCH 3 /* No such process */ #define EINTR 4 /* Interrupted system call */ #define EIO 5 /* I/O error */ #define ENXIO 6 /* No such device or address */ #define E2BIG 7 /* Argument list too long */ #define ENOEXEC 8 /* Exec format error */ #define EBADF 9 /* Bad file number */ #define ECHILD 10 /* No child processes */ #define EAGAIN 11 /* Try again */ #define ENOMEM 12 /* Out of memory */ #define EACCES 13 /* Permission denied */ #define EFAULT 14 /* Bad address */ #define ENOTBLK 15 /* Block device required */ #define EBUSY 16 /* Device or resource busy */ #define EEXIST 17 /* File exists */ #define EXDEV 18 /* Cross-device link */ #define ENODEV 19 /* No such device */ #define ENOTDIR 20 /* Not a directory */ #define EISDIR 21 /* Is a directory */ #define EINVAL 22 /* Invalid argument */ #define ENFILE 23 /* File table overflow */ #define EMFILE 24 /* Too many open files */ #define ENOTTY 25 /* Not a typewriter */ #define ETXTBSY 26 /* Text file busy */ #define EFBIG 27 /* File too large */ #define ENOSPC 28 /* No space left on device */ #define ESPIPE 29 /* Illegal seek */ #define EROFS 30 /* Read-only file system */ #define EMLINK 31 /* Too many links */ #define EPIPE 32 /* Broken pipe */ #define EDOM 33 /* Math argument out of domain of func */ #define ERANGE 34 /* Math result not representable */ #endif

二、实例


1、errno

#include <stdio.h> #include <errno.h> int main() { FILE*fp; fp = fopen("temp","r"); if(fp == NULL) { fprintf(stderr,"fopen() failed! errno = %d\n",errno); exit(1); } puts("OK!"); exit(0); }

运行结果:

fopen() failed! errno = 2

errno = 2 从内核定义可以看到表示没有文件或目录

#define ENOENT 2 /* No such file or directory */

直接使用errno存在一个缺陷,因为errno是一个整型数值,需要查看内核代码才能知道含义。可以使用 perror()、strerror(errno) 打印错误字符串。

2、perror()

#include <stdio.h> #include <errno.h> int main() { FILE*fp; fp = fopen("temp","r"); if(fp == NULL) { //fprintf(stderr,"fopen() failed! errno = %d\n",errno); perror("fopen() failed!"); exit(1); } puts("OK!"); exit(0); }

perror()可以直接输出错误信息,输出结果如下:

fopen() failed!: No such file or directory

3、strerror(errno)

strerror(errno)将errno错误号转化成错误字符串

#include <stdio.h> #include <errno.h> #include <string.h> int main() { FILE*fp; fp = fopen("temp","r"); if(fp == NULL) { //fprintf(stderr,"fopen() failed! errno = %d\n",errno); //perror("fopen() failed!"); fprintf(stderr,"fopen() failed! errno = %s\n",strerror(errno)); exit(1); } puts("OK!"); exit(0); }

运行结果:

fopen() failed! errno = No such file or directory

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/31 17:03:52

C++、Qt中打开文件夹获取文件

void Qt_operateping::onOpenFileClicked() {// 打开文件对话框&#xff0c;供用户选择图片文件// getOpenFileName() 函数的四个参数依次是&#xff1a;// 1. 父组件&#xff0c;通常传递当前对象 this// 2. 对话框标题// 3. 初始打开的文件路径&#xff08;此处是 D 盘根目录…

作者头像 李华
网站建设 2026/2/1 20:23:38

多存储源文件同步终极方案:5分钟搞定跨平台数据一致性

多存储源文件同步终极方案&#xff1a;5分钟搞定跨平台数据一致性 【免费下载链接】zfile 项目地址: https://gitcode.com/gh_mirrors/zfi/zfile 还在为不同存储设备间的文件版本混乱而烦恼吗&#xff1f;当团队成员在本地磁盘、云盘和服务器上同时编辑文档时&#xff…

作者头像 李华
网站建设 2026/2/6 7:50:59

Expo通知功能深度解析:5个实战技巧提升用户体验

Expo通知功能深度解析&#xff1a;5个实战技巧提升用户体验 【免费下载链接】expo An open-source platform for making universal native apps with React. Expo runs on Android, iOS, and the web. 项目地址: https://gitcode.com/GitHub_Trending/ex/expo Expo作为R…

作者头像 李华
网站建设 2026/2/1 18:57:11

Stata中介效应检验完全指南:从安装到实战

Stata中介效应检验完全指南&#xff1a;从安装到实战 【免费下载链接】Stata15.1中介效应Sobel检验安装包 Stata 15.1 中介效应 Sobel 检验安装包 项目地址: https://gitcode.com/open-source-toolkit/55355 还在为Stata中介效应分析发愁吗&#xff1f;今天我们将带您快…

作者头像 李华
网站建设 2026/2/5 10:19:30

揭秘RPA:高效办公的未来利器

这里以金智维版本学习为例。1.什么是RPA K-RPA里的“RPA”是“Robotic Process Automation”的英文缩写&#xff0c;中文翻译为机器人流程自动化&#xff0c;亦可翻译成软件机器人、虚拟劳动者&#xff0c;是可以记录人在计算机上的操作&#xff0c;并重复运行的软件。因其可以…

作者头像 李华
网站建设 2026/1/29 12:02:45

14、互联网应用全攻略:新闻组、邮件与即时通讯的使用指南

互联网应用全攻略:新闻组、邮件与即时通讯的使用指南 1. 新闻组的探索与使用 1.1 新闻组简介 新闻组可以被视为公共信息公告板,在这里,有相似兴趣的人们聚在一起讨论某个主题。和网络论坛一样,新闻组也是获取技术支持的好地方。不过,Firefox 并不提供新闻组支持,你可以…

作者头像 李华