认识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. [开发工具]JBuilder2008已经发布
  2. 【深度学习】用Pytorch给你的母校做一个样式迁移吧!
  3. 机器学习自主解决安全威胁离我们还有多远?
  4. 【总结】C# 线程同步技术(一)之 Join 方法
  5. 想赚钱?先把底层逻辑搞清楚
  6. python 复习计划
  7. 中兴f460光猫资料
  8. 吊打天猫精灵等“本土”智能音箱,HomePod做得到吗?...
  9. Android 白天黑夜模式切换适配及引起的Activity销毁重启解决
  10. ios swift判断两个对象是否相等 == isEqual remove add
  11. Java爬虫之利用Jsoup+HttpClient爬取类叔叔不约匿名聊天网站的图片,未果——后爬取某网站美女图片案例
  12. 全栈开发-IDE介绍与设置、字符串格式化、数据类型、for循环
  13. Jenkins 部署项目出现 Failed to connect to repository : Command git ls-remote -h http://gitlab. 128
  14. [C#] 内存占用释放
  15. STM32F4学习笔记1
  16. 参考一:双缝干涉与波长测量
  17. Vue中阿拉伯数字与汉字的相互转换
  18. 无人叉车市场现状与发展趋势分析|无人叉车专题(一)
  19. [附源码]计算机毕业设计JAVA汽车租赁管理系统论文
  20. Zemax操作36--一个选择初始结构的例子

热门文章

  1. 生活的眼前,真的只有苟且吗?
  2. linux 怎么查看操作系统版本命令
  3. Labelme配置、标注快捷键
  4. Best practices for knowing your LIMIT and kicking %NOTFOUND
  5. 『北京』今天早上刚发生在北京的真实的对话
  6. Doris Routine Load正则表达实战
  7. [护网杯 2018]easy_tornado
  8. 官宣:了解神策数据分析师,这一篇就够了 | 神策招人记
  9. 提高百度权重有什么用?百度真的也有PR值
  10. hbase scan超时设置_hbase scan超时问题