news 2026/7/11 6:35:56

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/7/10 19:36:08

【光照】Unity[PBR]环境光中的[漫反射]

漫反射辐照的核心作用漫反射辐照&#xff08;Diffuse Irradiance&#xff09;在URP PBR中用于模拟环境光对物体表面的均匀散射效果&#xff0c;通过预计算环境立方体贴图的低频光照信息&#xff0c;为动态物体提供间接漫反射光照。其核心公式为&#xff1a;$L_d\frac{c}{\pi}\i…

作者头像 李华
网站建设 2026/7/6 13:01:06

39、NFS与网络路由管理:配置、问题诊断及参数调优

NFS与网络路由管理:配置、问题诊断及参数调优 1. 网络路由配置 1.1 关闭IP转发 在系统启动时,如果存在 /etc/notrouter 文件,系统将不会执行IP转发。若想立即关闭IP转发,可执行以下命令: # touch /etc/notrouter # /usr/sbin/ndd -set /dev/ip ip_forwarding 01.2 …

作者头像 李华
网站建设 2026/7/10 8:18:25

CentOS7 磁盘扩容

1.在vm虚拟机中添加一个新的磁盘 在vm虚拟机中添加一个磁盘这里我添加了一个10GB的磁盘 2.对于磁盘进行分区 我们先运行 lsblk来查看我们刚刚新添加磁盘的代号可以看到我这里添加的新磁盘是sdf那么我们现在进行分区&#xff1a; fdisk /dev/sdf然后我们按n开始分区&#xff1a;…

作者头像 李华
网站建设 2026/7/8 20:32:33

PDFMathTranslate中文乱码终极解决方案:从诊断到完美修复

PDFMathTranslate中文乱码终极解决方案&#xff1a;从诊断到完美修复 【免费下载链接】PDFMathTranslate PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译&#xff0c;支持 Google/DeepL/Ollama/OpenAI 等服务&#x…

作者头像 李华
网站建设 2026/7/11 2:48:03

直接数字下变频 原理解释和python仿真

第一步&#xff1a;图 25.12 & 25.13 —— 寻找“完美的采样点”这两张图是在教我们怎么“偷懒”。1. 笨办法但很完美&#xff08;图 25.12&#xff09;2. 聪明的偷懒&#xff08;图 25.13&#xff09;第二步&#xff1a;图 25.14 —— 频域里的“乾坤大挪移”这张图解释了…

作者头像 李华
网站建设 2026/7/6 3:46:43

告别低效内耗:2025中小企业办公新方式

在数字化浪潮的推动下&#xff0c;中小企业的办公模式正迎来颠覆性变革。不同于大型企业拥有充足的资金和专业IT团队支撑复杂系统落地&#xff0c;中小企业更需要“轻量化部署、低成本投入、高适配性”的办公解决方案。仲量联行报告显示&#xff0c;2025年已有73%的中小企业实现…

作者头像 李华