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 ...
随机推荐
- 【POI】导出excel文件,不生成中间文件,直接将内存中的数据创建对象下载到浏览器
不是从InputStream中read,然后outputStream再write @RequestMapping("download4Excel") public void dow ...
- Manacher回文串算法学习记录
FROM: http://hi.baidu.com/chenwenwen0210/item/482c84396476f0e02f8ec230 #include<stdio.h> #inc ...
- 解决中文环境下zabbix监控图形注释乱码
zabbix监控的图形界面能够更直观的查看监控状态,当我们把zabbix的语言切换为中文的时候,会发现监控图形中一些中文参数会乱码,例如下面的效果 但是图形界面在原生的英文环境下完全没有乱码问题.为了 ...
- java学习笔记——Collection集合接口
NO 方法名称 描述 1 public boolean add(E e) 向集合中保存数据 2 public void clear() 清空集合 3 public boolean contains(O ...
- es6 - array for-chrome
// 去重复 Array.from(new Set([1, 1, 2, 3])); // [1, 2, 3] console.log(Array.from(new Set([1, 1, 2, 3])) ...
- matplotlib画图实例:pyplot、pylab模块及作图參数
http://blog.csdn.net/pipisorry/article/details/40005163 Matplotlib.pyplot画图实例 {使用pyplot模块} matplotli ...
- 【VBA】切换引用样式
在Excle中有两种引用方式,例如:第一行第一列的单元格可以是:A1 也可以是R1C1 切换引用样式的代码如下: Sub 切换引用样式() Application.ReferenceStyle = ...
- Ros 中的多线程
参考文献:http://blog.csdn.net/sinat_27554409/article/details/48446611 老王说ROS http://blog.csdn.net/yake ...
- FormatFloat
http://www.delphibasics.co.uk/RTL.asp?Name=FormatFloat 1 function FormatFloat ( const Formatting : ...
- android收起软键盘
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);if(imm != null) ...