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 ...
随机推荐
- virtualenv 环境安装
# Python 2.7.6:wget http://python.org/ftp/python/2.7.6/Python-2.7.6.tar.xztar xf Python-2.7.6.tar. ...
- ios开发 Socket通信
Socket描述了一个IP.端口对.它简化了程序员的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器端来处理发送的这些消息.所以,Socket一定包含了通信的双发,即客户端(Clien ...
- wp8开发时模拟器无法联网解决方法
关于模拟器无法联网的正常解决方案在网上有很多 这里讲的是我在做测试的时候模拟器无法上网的特殊情况 由于使用的是无线网络 可能有一些差别 过程如图: 启动模拟器 如果之前没有设置过模拟器的交换器则会出现 ...
- Web项目中用mybatis配置多个数据库
需要在项目中配置多个数据库(比如一个mysql,一个oracle)的时候,可按照如下方式配置 首先是第一个数据库的配置 <bean name="transactionManager&q ...
- [转]Tomcat处理一个HTTP请求的过程
1.Tomcat Server的组成部分 1.1 - Server A Server element represents the entire Catalina servlet container. ...
- MySql 删除相同前缀的表名
SELECT CONCAT('drop table ', table_name, ';') FROM information_schema.tables WHERE table_name LIKE ' ...
- mongo: 索引
索引创建 在学习索引之前,我们先看一下,如果没有添加索引时,我们用explain()函数,查看查询计划是什么样的. 发现使用的是BasicCursor,那么就代表我们没有索引,当我们查某一个数据的时候 ...
- [转载]Error -27796: Failed to connect to server
原文地址:Error -27796: Failed to connect to server "test.shunde.gov.cn:80"作者:蓝小C 问题描述: 使用Loa ...
- sql2000实现row_number
一.以PersonID,classid,dt_ClassData为条件进行分组,每个小组加序号,row_number在sql2005中不可用 方法一.sql2000及以上版本--以PersonID,c ...
- 使用putty从linux主机上面往windows主机下面拷贝文件
更新一下,把putty的包解压以后,想要在dos窗口中直接使用,必须把putty解压的文件的路径添加到环境变量中,这样使用起来就会非常简单了. 郁闷了好久,终于搞定了putty的上传下载文件命令psc ...