《C/C++ 面试 100 例》(十三)errno

一、 errno 介绍

  • errno 是一个全局的宏;
  • 程序执行的时候会把 errno 置上对应的错误码,同时也有一些相关的宏,如下:
#define errno   (*_errno())
#define _doserrno   (*__doserrno())
#define _sys_errlist (__sys_errlist())
#define _sys_nerr (*__sys_nerr())
  • 程序开始执行的时候,errno 和 _doserrno 会被置 0,当一个系统调用出错时,errno 会被置上一个非 0 的值;因为 errno 存储了上一次调用的值,所以它可能会被成功的调用改变,所以一旦出错,需要里面把这个值输出来;
  • I/O 操作发生错误时,_doserrno 会被置上;

二、错误信息输出

  • errno 是一个数字,具体含义对应在 _sys_errlist 中,比如发生错误时,可以输出 _sys_errlist [ errno ] 来看具体含义,_sys_nerr 则代表了 _sys_errlist 这个数组的长度;
  • 为了安全性考虑,一般可以采用 perror、strerror 或 strerror_s 来进行错误码的输出;
	FILE* pf = fopen("test.txt", "r");
	if (!pf) {
		perror("perror");
		printf("strerror: %s\n", strerror(errno));
		printf( _strerror("_strerror") );
	}
perror: No such file or directory
strerror: No such file or directory
_strerror: No such file or directory

三、错误码表查询

错误码含义
NULL0No error
EPERM1Operation not permitted
ENOENT2No such file or directory
ESRCH3No such process
EINTR4Interrupted function call
EIO5Input/output error
ENXIO6No such device or address
E2BIG7Arg list too long
ENOEXEC8Exec format error
EBADF9Bad file descriptor
ECHILD10No child processes
EAGAIN11Resource temporarily unavailable
ENOMEM12Not enough space
EACCES13Permission denied
EFAULT14Bad address
/15Unknown error
EBUSY16Resource device
EEXIST17File exists
EXDEV18Improper link
ENODEV19No such device
ENOTDIR20Not a directory
EISDIR21Is a directory
EINVAL22Invalid argument
ENFILE23Too many open files in system
EMFILE24Too many open files
ENOTTY25Inappropriate I/O control operation
/26Unknown error
EFBIG27File too large
ENOSPC28No space left on device
ESPIPE29Invalid seek
EROFS30Read-only file system
MLINK31Too many links
EPIPE32Broken pipe
EDOM33Domain error
ERANGE34Result too large
/35Unknown error
EDEADLK36Resource deadlock avoided
/37Unknown error
ENAMETOOLONG38Filename too long
ENOLCK39No locks available
ENOSYS40Function not implemented
ENOTEMPTY41Directory not empty
EILSEQ42Illegal byte sequence
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

英雄哪里出来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值