认识errno

errno定义于头文件<cerrno> <errno.h> errno 是用于错误指示的预处理器宏。它展开成一个静态 (C++11 前)线程局域 (C++11 起)的 int 类型可修改左值。
数个标准库函数通过写入正整数到 errno 指示错误。 errno 的值被典型地设置为作为列于 <cerrno> 的,以字母 E 起始,后随大写字母或数字的宏常量。
程序启动时 errno 的值为 ​0​ ,而且尽管不管在错误发生与否时,允许写入正整数到 errno ,库函数决不会存储 ​0​ 于 errno

常见错误码

c++11为了减少平台差异匹配了POSIX错误码中的大多数具体标准c的请参见<errno.h>文件及包含部分,有些可能是平台扩展的linux可以参照 man errno(3)

E2BIG  (C++11) //参数列表过长
EACCES  (C++11) //权限被禁止
EADDRINUSE  (C++11) //地址在使用中
EADDRNOTAVAIL  (C++11) //地址不可用
EAFNOSUPPORT  (C++11) //不支持地址系列
EAGAIN  (C++11) //资源不可用,须重试
EALREADY  (C++11) //连接已在进行
EBADF  (C++11) //坏的的文件描述符
EBADMSG  (C++11) //坏的消息
EBUSY  (C++11) //设备或资源忙
ECANCELED  (C++11) //操作取消
ECHILD  (C++11) //无子进程
ECONNABORTED  (C++11) //连接被打断
ECONNREFUSED  (C++11) //连接被拒绝
ECONNRESET  (C++11) //连接被重置
EDEADLK  (C++11) //资源死锁会发生
EDESTADDRREQ  (C++11) //要求目标地址
EDOM 数学参数在函数定义域外
EEXIST  (C++11) //文件已存在
EFAULT  (C++11) //坏的地址
EFBIG  (C++11) //文件过大
EHOSTUNREACH  (C++11) //主机不可抵达
EIDRM  (C++11) //标识符被移除
EILSEQ  (C++11) //非法字节序列
EINPROGRESS  (C++11) //操作已在进行
EINTR  (C++11) //函数被中断
EINVAL  (C++11) //非法参数
EIO  (C++11) //I/O 错误
EISCONN  (C++11) //接头已连接
EISDIR  (C++11) //是目录
ELOOP  (C++11) //符号链接级别过多
EMFILE  (C++11) //文件描述符值过大
EMLINK  (C++11) //链接过多
EMSGSIZE  (C++11) //消息过大
ENAMETOOLONG  (C++11) //文件名过长
ENETDOWN  (C++11) //网络不工作
ENETRESET  (C++11) //连接被网络打断
ENETUNREACH  (C++11) //网络不可抵达
ENFILE  (C++11) //系统中打开文件过多
ENOBUFS  (C++11) //无缓冲空间可用
ENODATA  (C++11) //流头已读取队列中无消息
ENODEV  (C++11) //无此设备
ENOENT  (C++11) //无此文件或目录
ENOEXEC  (C++11) //可执行文件格式错误
ENOLCK  (C++11) //无可用锁
ENOLINK  (C++11) //链接已切断
ENOMEM  (C++11) //空间不足
ENOMSG  (C++11) //无所需类型消息
ENOPROTOOPT  (C++11) //协议不可用
ENOSPC  (C++11) //设备无剩余空间
ENOSR  (C++11) //无流资源
ENOSTR  (C++11) //非流
ENOSYS  (C++11) //不支持的函数
ENOTCONN  (C++11) //未连接的接头
ENOTDIR  (C++11) //非目录
ENOTEMPTY  (C++11) //目录非空
ENOTRECOVERABLE  (C++11) //状态不可恢复
ENOTSOCK  (C++11) //非接头
ENOTSUP  (C++11) //不支持
ENOTTY  (C++11) //不适合的 I/O 控制操作
ENXIO  (C++11) //无此设备或地址
EOPNOTSUPP  (C++11) //接头上不支持的操作
EOVERFLOW  (C++11) //值过大而无法存入数据类型
EOWNERDEAD  (C++11) //先前拥有者已死
EPERM  (C++11) //操作不允许
EPIPE  (C++11) //管道损坏
EPROTO  (C++11) //协议错误
EPROTONOSUPPORT  (C++11) //不支持的协议
EPROTOTYPE  (C++11) //接头类型错误的协议
ERANGE 结果过大
EROFS  (C++11) //只读文件系统
ESPIPE  (C++11) //非法寻位
ESRCH  (C++11) //无此进程
ETIME  (C++11) //流 ioctl() 超时
ETIMEDOUT  (C++11) //连接超时
ETXTBSY  (C++11) //文本文件忙
EWOULDBLOCK  (C++11) //操作会阻塞
EXDEV  (C++11) //跨设备链接

错误处理函数

/**
打印当前存储于系统变量 errno 的错误码到 stderr1. 如果s为空指针或s所指向字符为空字符 则直接输出错误消息。负责为s:错误消息2. 描述存储于errno的错误码的错误消息字符串后随 '\n'
*/
void perror( const char *s );//stdio.h
/**
返回指向系统错误码 errnum 的文本表示的指针,它等同于 std::perror() 会打印的描述
通常从 errno 对象获得 errnum ,不过函数接受任何 int 类型值。字符串的内容是本地环境限定的。
程序必须不修改返回的字符串,但对 strerror 函数的后继调用可能重写该字符串。
不要求 strerror 为线程安全。实现可以返回指向静态只读字符串字面量的不同指针,
或反复返回指向静态缓冲区的同一指针而 strerror 于该缓冲区中放置字符串
*/
char* strerror( int errnum );//string.h
同strerror只不过缓冲区由用户指定POSIX有int strerror_r(int errnum, char *strerrbuf, size_t buflen);
errno_t strerror_s( char *buf, rsize_t bufsz, errno_t errnum );//string.h[c++11]

示例

#include <stdio.h>
#include <errno.h>
#include <string.h>int main()
{errno = ENOSPC;perror(NULL);perror("");perror("test");printf("%s\n", strerror(errno));char err_buf[200] = { 0 };strerror_s(err_buf,200, errno);printf("%s\n", err_buf);getchar();return 0;
}

示例结果

No space left on device
No space left on device
test: No space left on device
No space left on device
No space left on device

c++ 错误号errno相关推荐

  1. 安装程序向硬盘复制文件是遇到错误:[Errno 5] Input/out error ;U盘安装Ubuntu18.04.1遇到错误

    U盘安装Ubuntu18.04.1遇到错误: 安装程序向硬盘复制文件是遇到错误:[Errno 5] Input/out error : 这通常是由于CD/DVD盘片或者驱动器有问题,或者硬盘错误造成的 ...

  2. linux socket错误提示errno分析

    参考链接:http://aigo.iteye.com/blog/1911134 参考链接:https://baike.baidu.com/item/errno/11040395?fr=aladdin ...

  3. mysql 错误号1005_mysql - 错误代码:1005。无法创建表'...'(错误号:150)

    mysql - 错误代码:1005.无法创建表'...'(错误号:150) 我在互联网上搜索了这个问题的解决方案并检查了SO问题,但没有解决方案适用于我的情况. 我想从表sira_no到metal_k ...

  4. linux下yum错误:[Errno 14] problem making ssl connection Trying other mirror.

    所有的base 都要取消注释 mirrorlist 加上注释 另外所有的enable都要设为零 目录 今天是要yum命令安装EPEL仓库后 yum install epel-release 突然发现y ...

  5. Ubuntu 13.10 安装软件失败后出现的问题——已安装 post-installation 脚本 返回了错误号 1...

    安装Oracle-java7-installer失败后,再次重新安装后出现错误-- dpkg: error processing oracle-java7-installer (--configure ...

  6. 【错误归纳】E: Sub-process /usr/bin/dpkg returned an error code (1)子进程 已安装 post-installation 脚本 返回了错误号 1

    问题描述 我在使用apt-get install 安装某个程序的时候出现了下面的错误提示: 正在设置 anydesk (5.1.1) ...System start/stop links for /e ...

  7. 子进程 已安装 post-installation 脚本 返回了错误号 1

    子进程 已安装 post-installation 脚本 返回了错误号 1 //现将info文件夹更名 sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_ol ...

  8. WinAPI: waveOutGetErrorText - 根据错误号得到错误描述

    为什么80%的码农都做不了架构师?>>>    提示: 错误文本的长度一般不超过 MAXERRORLENGTH = 128; 如果缓冲区太小, 文本会被截断. //声明: waveO ...

  9. 在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: ‘文件路径’

    如题,在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: '文件路径',在查阅了大量资料后也得到了一些解决方案,但是这些解决方案 ...

最新文章

  1. 一个苹果证书供多台电脑开发使用——导出p12文件
  2. BCH的创新已打破比特币的共识效应
  3. Java 流(Stream)、文件(File)和IO -- Java ByteArrayOutputStream类
  4. spring事件通知机制详解
  5. Redis进阶-Redis的惰性删除
  6. 搭建和测试Android JAVA NDK
  7. 【SPOJ 694】Distinct Substrings (更直接的求法)
  8. 网络位置可以看到另一个人的电脑_计算机组成原理(一)- 冯·诺依曼体系结构...
  9. 图解算法学习笔记(一): 算法简介
  10. “” '' ``区别 初学者自用
  11. php ajax.open的 url路径,php – 检测Ajax调用URL
  12. Oracle GoldenGate Director安装和配置(无图)
  13. php遍历目录与文件夹的多种方法详解
  14. 电磁仿真原理——3. 变分法(Variationl Methods)
  15. ailed to send crash report due to a network error: SocketException: OS Error: 信号灯超时时间已到 , errno = 12
  16. 基于STM32的汽车智能灯光控制系统
  17. 微信提现php 该怎么加密,关于php 调用接口 微信云支付 HmacSha256 加密 request_content...
  18. TestNG 参数化测试
  19. JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!
  20. 空指针异常可能出现的原因

热门文章

  1. 视觉SLAM十四讲第二版踩坑总结
  2. py计时器 为了孙曌凌/CSDN
  3. 中国旋转电位器市场趋势报告、技术动态创新及市场预测
  4. 运维 --- Nginx介绍和在CentOS/Redhat下安装
  5. 三维仿真在智慧城市中的运用,机械臂智能垃圾分类
  6. 【概率论基础进阶】随机变量及其分布-随机变量及其分布函数
  7. justify-content、align-content、align-items、align-self的区别
  8. 糯米团—重制“iPhone团购信息客户端”(一)
  9. 08:MySQL多表操作
  10. 麒麟系统测试丢包率软件,win10系统测试丢包率的操作方法