GUN C中的错误报告
在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中的错误报告的更多相关文章
- 关于PHP.INI中的错误ERROR报告级别设置
最近在写php的过程中发现php提示php notice:………………的字样,虽然这个只是php的提示内容,并没有什么大的影响,但是出于安全性和美观方面的考虑,小弟还是想把这个东西去掉. 那么,怎么办 ...
- PHP中如何设置error_reporting错误报告级别
错误报告级别:指定了在什么情况下,脚本代码中的错误(这里的错误是广义的错误,包括E_NOTICE注意.E_WARNING警告.E_ERROR致命错误等)会以错误报告的形式输出. 设置错误报告级别的 ...
- iOS错误报告中关于崩溃地址的分析
http://blog.csdn.net/gaoyp/article/details/46912753 一.错误报告中的三种地址:stack addressload addresssymbol add ...
- C和指针 第十五章 错误报告perror和exit
15.1 错误报告 perror 任何一种程序都存在出错的可能,包括系统的函数库,当出现错误时,系统提示发生错误,标准库函数在一个外部整型变量中保存错误代码,然后把错误代码传给用户程序,提示错误原因. ...
- PHP中的错误处理、异常处理机制详解
在编写PHP程序时,错误处理是一个重要的部分.如果程序中缺少错误检测代码,那么看上去很不专业,也为安全风险敞开了大门 例: <?php $a = fopen('test.txt','r'); / ...
- javascript中的错误处理机制
× 目录 [1]对象 [2]类型 [3]事件[4]throw[5]try[6]常见错误 前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较 ...
- ***PHP中error_reporting()用法详解(含codeigniter框架中屏蔽错误提示的解决方案)
php中我们对错误的处理会常用到error_reporting函数了,大家可以看到最多的是error_reporting(E_ALL ^ E_NOTICE)了,这个到底什么意思呢,下面我来来看看. e ...
- AD6电气规则错误报告中英文对照
Ⅰ:Error Reporting 错误报告 A:Violations Associated with Buses 有关总线电气错误的各类型(共 12 项) ◆ bus indices out of ...
- Android IOS WebRTC 音视频开发总结(七五)-- WebRTC视频通信中的错误恢复机制
本文主要介绍WebRTC视频通信中的错误恢复机制(我们翻译和整理的,译者:jiangpeng),最早发表在[这里] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blac ...
随机推荐
- 【Maven】1.使用myecplise配置自己的Maven配置,不使用默认的maven
[好文章]参考地址: http://www.cnblogs.com/luotaoyeah/p/3764533.html ---------------------------------------- ...
- [置顶]
docker1.12--docker命令行帮助文档
镜像操作 build 使用dockerfile方式创建镜像 使用dockerfile文件docker build dockerflle/,dockerfile文件默认位于dockerflle/Dock ...
- 阿里蚂蚁的前端ant-design
蚂蚁国内镜像: http://ant-design.gitee.io/components/date-picker-cn/ 阿里的设计平台:https://design.alipay.com/deve ...
- LVS/NAT
平台:RedHat Enterprise Linux centos6.3 ipvsadm ipvs 1. NAT模型 NAT模型:地址转换类型,主要是做地址转换,类 ...
- 对类中的成员函数的定义和声明最后添加一个const是什么意思?
1.const修饰的成员函数只能调用const修饰的成员函数,且不能修改数据成员变量的值. 2.const修饰的类对象只能调用const修饰的成员函数. 3.const修饰的类对象可以调用非const ...
- 关于并发,异步,非阻塞(python)疑惑的一些资料解答
从iterable/iterator到generator到coroutine理解python的迭代器: http://python.jobbole.com/81916/理解python的生成器: ht ...
- [转载]Linux 卸载JDK并安装新版本JDK (rpm,tar)
FROM:http://josh-persistence.iteye.com/blog/1908549 一.查看Jdk的安装路径: whereis javawhich java (java执行路径)e ...
- UVa 10192 - Vacation & UVa 10066 The Twin Towers ( LCS 最长公共子串)
链接:UVa 10192 题意:给定两个字符串.求最长公共子串的长度 思路:这个是最长公共子串的直接应用 #include<stdio.h> #include<string.h> ...
- Spring获取HttpServletRequest
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()
- Linux作业(三)-shell统计某文章中出现频率最高的N个单词并排序输出出现次数
Linux课上的作业周三交,若有考虑不周到的地方,还请多多不吝赐教. shell处理文本相关的经常使用命令见此博客 # #假设输入两个參数 则第一个为统计单词的个数.第二个为要统计的文章 #假设输入一 ...