在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. 【Linux】CentOS7上安装JDK 和卸载 JDK 【rpm命令的使用】

    之前有过一篇在CentOS7上安装JDK的文章:http://www.cnblogs.com/sxdcgaq8080/p/7492426.html 在这里又说一次,是要使用rpm命令安装JDK的rpm ...

  2. MVC中自定义ViewPage和WebViewPage

    ViewPage和WebViewPage的作用就是将Controller中数据返回给页面,一个是针对aspx一个相对cshtml的.代码如下: public abstract class WebVie ...

  3. Java 使用IE浏览器下载文件,文件名乱码问题

    使用Servlet实现文件下载功能时,使用IE下载出现文件名乱码; 网上常见的解决办法是通过"user-agen"来判断浏览器: if (req.getHeader("u ...

  4. apache的order allow deny

    这个东西确实挺容易让我们迷糊.其实也不难,只要你掌握这样一条规律即可:首先举个例子: Order deny,allowdeny  from allallow from 127.0.0.1 我们判断的依 ...

  5. Centos7.x系统优化

    1.安装常用软件 yum install tree nmap sysstat lrzsz dos2unix wget  net-tools ntpdate -y 2.配置yum源 mv /etc/yu ...

  6. OpenGL投影矩阵【转】

    OpenGL投影矩阵 概述 透视投影 正交投影 概述 计算机显示器是一个2D平面.OpenGL渲染的3D场景必须以2D图像方式投影到计算机屏幕上.GL_PROJECTION矩阵用于该投影变换.首先,它 ...

  7. 搜索引擎Solr-6.6.0搭建

    一.简介 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http ...

  8. Python连接mongodb提取部分字段内数据并写入txt文件

    #coding=utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') from pymongo import MongoClient ...

  9. 转:MVVM的基本入门简介

    https://mp.weixin.qq.com/s?__biz=MzA3MjA4NjE3NQ==&mid=404502568&idx=1&sn=fe512f9820b99d3 ...

  10. 如何安装Android SDK Emulator

    1 下载并安装JDK,可以到官方网站寻找自己的对应版本下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u1-downlo ...