在C语言中,很多库函数在调用失败时都会返回特定的值。比如返回-1,空指针,EOF等。但是这些值仅仅表示的调用失败,并未给出详细的错误信息。如果想查看详细的错误内容,就要去查看errno的错误代码,errno在errno.h中定义。

  关于errno的解释(一个int类型,可修改的左值):

    errno包含了系统中的常见错误编号,我们也可以对它进行修改。

    由于errno被声明为volatile,它可能会被信号处理程序异步地更改; 请参阅定义处理程序。 但是,正确写入的信号处理程序可以保存并恢复errno的值,所以通常不用担心这种可能性,除非写信号处理程序。

    errno在程序运行时被初始化为0。很多库函数会在调用失败时,将errno的值设定为一些特定非零值。这些错误条件列出每个具体的错误,这些错误在函数成功调用时不会更改errno的值,因此我们不能使用errno来确定调用是否失败。我们应该在每个方法中都定义errno,在调用时检查errno的值。

    很多库函数都会在被调用结束是设定非零的errno作为函数返回值表示调用失败,我们应当假设任何库函数都在要返回失败信息是修改errno的值。

    可移植性注意:ISO C将errno指定为“可修改的左值”,而不是作为变量,允许将其作为宏实现。 例如,它的扩展可能涉及一个函数调用,如* __ errno_location()。 其实这就是GNU / Linux和GNU / Hurd系统。 每个系统上的GNU C Library都可以对特定系统进行任何操作。

    有一些库函数,如sqrt和atan,在出现错误时返回完全合法的值,但也设置errno。 对于这些函数,如果要检查是否发生错误,推荐的方法是在调用函数之前将errno设置为零,然后再检查其值。

  所有错误代码都有符号名称,他们作为宏定义在<errno.h>。这些名称已'E'作为开始和其他大写字母或数字组合。我们应当查看C库中定义的保留名称

  错误代码值都是正整数,并且都是不同的,除了一个例外:EWOULDBLOCK和EAGAIN是相同的。 由于值不同,可以将它们用作switch语句中的标签; 只需不要同时使用EWOULDBLOCK和EAGAIN。 程序不应该对这些符号常量的具体值做出任何其他假设。

  由于errno可以作为其他情况返回自己特定的错误值,因此没有必要作为对于任意宏实现,但是不应当对某些特定库函数的唯一值进行修改。

  除了在GNU / Hurd系统之外,如果给定一个无效的指针作为参数,几乎任何系统调用都可以返回EFAULT。 由于这只能由于程序中的错误而发生,并且由于不会在GNU / Hurd系统上发生错误,所以在单个功能的描述中,没有提及EFAULT,节省了空间。

  在某些Unix系统中,许多系统调用也可以返回EFAULT,如果作为参数指定一个指向堆栈的指针,并且由于某些模糊原因的内核尝试扩展堆栈,将失败。 如果发生这种情况,应该尝试使用静态或动态分配的内存而不是该系统上的堆栈内存。

  

GUN C中的错误报告的更多相关文章

  1. 关于PHP.INI中的错误ERROR报告级别设置

    最近在写php的过程中发现php提示php notice:………………的字样,虽然这个只是php的提示内容,并没有什么大的影响,但是出于安全性和美观方面的考虑,小弟还是想把这个东西去掉. 那么,怎么办 ...

  2. PHP中如何设置error_reporting错误报告级别

    错误报告级别:指定了在什么情况下,脚本代码中的错误(这里的错误是广义的错误,包括E_NOTICE注意.E_WARNING警告.E_ERROR致命错误等)会以错误报告的形式输出.   设置错误报告级别的 ...

  3. iOS错误报告中关于崩溃地址的分析

    http://blog.csdn.net/gaoyp/article/details/46912753 一.错误报告中的三种地址:stack addressload addresssymbol add ...

  4. C和指针 第十五章 错误报告perror和exit

    15.1 错误报告 perror 任何一种程序都存在出错的可能,包括系统的函数库,当出现错误时,系统提示发生错误,标准库函数在一个外部整型变量中保存错误代码,然后把错误代码传给用户程序,提示错误原因. ...

  5. PHP中的错误处理、异常处理机制详解

    在编写PHP程序时,错误处理是一个重要的部分.如果程序中缺少错误检测代码,那么看上去很不专业,也为安全风险敞开了大门 例: <?php $a = fopen('test.txt','r'); / ...

  6. javascript中的错误处理机制

    × 目录 [1]对象 [2]类型 [3]事件[4]throw[5]try[6]常见错误 前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较 ...

  7. ***PHP中error_reporting()用法详解(含codeigniter框架中屏蔽错误提示的解决方案)

    php中我们对错误的处理会常用到error_reporting函数了,大家可以看到最多的是error_reporting(E_ALL ^ E_NOTICE)了,这个到底什么意思呢,下面我来来看看. e ...

  8. AD6电气规则错误报告中英文对照

    Ⅰ:Error Reporting 错误报告 A:Violations Associated with Buses 有关总线电气错误的各类型(共 12 项) ◆ bus indices out of  ...

  9. Android IOS WebRTC 音视频开发总结(七五)-- WebRTC视频通信中的错误恢复机制

    本文主要介绍WebRTC视频通信中的错误恢复机制(我们翻译和整理的,译者:jiangpeng),最早发表在[这里] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blac ...

随机推荐

  1. ncurses简单的一个多窗体程序

    #include <ncurses.h> #include <string.h> #include <iostream> #include <stdlib.h ...

  2. Python 把u'\xca\xd3\xc6\xb5\xd7\xa5\xc8\xa1' 输出正常中文

    今天碰见从数据库读取出来数据是u'\xca\xd3\xc6\xb5\xd7\xa5\xc8\xa1',输出显示乱码,经常查询处理如下: 两种方式: 1. s = u'\xca\xd3\xc6\xb5\ ...

  3. 走进C++程序世界-----operator new delete 重载

     在C++ 的世界里,new 和delete 是keyword.而在C的世界里相相应的malloc和free是函数,关键C++的new和delete分析,详见前面的章节.这里就不在过多的介绍了.链接. ...

  4. idea 去掉never used 提示

  5. selenium实现失败重运行

    UI自动化脚本执行过程中存在非常多的不稳定性,例如网络的不稳定,浏览器无响应等等,这些失败往往并不是产品中的错误.那么这时我们往往需要对执行失败的测试用例进行多次重跑,确认其是否确实失败. 那么失败重 ...

  6. javascript 中event是全局变量

    The only thing I can think of is that event is in fact window.event and it makes itself available wh ...

  7. Web项目中用mybatis配置多个数据库

    需要在项目中配置多个数据库(比如一个mysql,一个oracle)的时候,可按照如下方式配置 首先是第一个数据库的配置 <bean name="transactionManager&q ...

  8. Shader toy (顺手写两个Gyro)(纯代码写3D)

    Shader toy (A new world) 1.一个多月了,突然忘记CSDN的password了.由于每次输password的时候都要计算一遍,于是没有计算出来- 2.回头发现都过了半年了,都快 ...

  9. poj1236 Network of Schools ,有向图求强连通分量(Tarjan算法),缩点

    题目链接: 点击打开链接 题意: 给定一个有向图,求: 1) 至少要选几个顶点.才干做到从这些顶点出发,能够到达所有顶点 2) 至少要加多少条边.才干使得从不论什么一个顶点出发,都能到达所有顶点   ...

  10. 服务器和java程序的桥梁--jdbc/hibernate

    现实的应用程序都是用户通过可视化界面发出指令从而修改数据库.本篇文章以Oracle为例,模拟怎么通过java代码实现数据库的增删改查. 新建一个Java项目,要建好桥梁,首先要拷入驱动Jar包放在项目 ...