对于库函数出错处理有两个十分有用的函数perror和exit:

一、错误报告

perror函数用一种简单统一的方式报告错误。ANSI C中的许多库函数,尤其是I/O函数,会调用操作系统去执行一些工作。但你要知道,任何时候操作系统都会有出错的可能。例如,一个程序试图去读取一个不存在的磁盘文件,这时操作系统除了提示:“出错了!”,别的它也做不了什么。这时,库函数首先会将代表操作出错的具体原因的错误代码保存到全局整型变量errono(在errno.h中定义),然后它再将错误提示传给用户程序。

perror函数只是将errno代表的特定的错误报告给用户,它的原型在stdio.h中定义如下:

void perror( char const *message );

如果message不是NULL,并且它指向了一个非空的字符串,perror首先会打印出message,紧接着打印一个冒号“:”和一个空格。最后打印当前errno代表的出错原因信息。

注意:当库函数执行成功的时候,并不会去修改errno;只有当函数执行失败的时候才会去修改errno的值。这意味着,我们不能通过测试errno来判断函数执行是否出现了错误。只有当确定函数确实出错以后才去检查errno的值来查看出错的具体原因。

二、结束执行

另一个十分有用的函数是exit,它用来结束一个程序的执行。它的原型在stdlib.h中定义如下:

void exit( int status );

exit函数会将参数status会返回给操作系统,status指示程序是否正常完成,它跟main函数中的返回值是一样的。关于status有两个预定义的符号:EXIT_SUCCESS和EXIT_FAILURE,分别代表成功结束和失败结束。

当发现阻止程序继续执行的错误条件时,exit函数是特别有用的。通常,我们在调用perror函数后,紧接着调用exit函数。

注意:exit函数从不会返回任何值。当exit结束时,程序都消失了,哪里还有可返回的东西呢。

出错处理完美搭配之perror&exit的更多相关文章

  1. LESS-Middleware:Node.js 和 LESS 的完美搭配

    LESS 是一个编写 CSS 的很好的方式 ,让你可以使用变量,嵌套规则,混入以及其它许多有用的功能,它可以帮助您更好地组织你的 CSS 代码. 最近我一直在研究 Node.js ,并想用 less- ...

  2. Android 完美退出 App (Exit)

    最近两天为了解决Android上面退出程序问题折腾了半死,在google & baidu 上面找了很久.很久出来的完全千篇一律,说的方法有三,但是经过我试验后全部不行. 三个方法分别是: ki ...

  3. HDU4685 Prince and Princess 完美搭配+良好的沟通

    意甲冠军:今天,有n王子,m公主.现在给他们配对,与王子会嫁给一个男人,他喜欢.公主无法做出选择. 这标题去咬硬,还有一类似的题目poj1904.那个题目也是给王子与公主配对,但那个是王子公主各n个, ...

  4. asp.net mvc 加三层架构 完美搭配

    http://www.hysql.org/aspnet/20180630/5712.html 先来一张项目的层级结构图: Model:模型层,主要是各种类型.枚举以及ORM框架,框架完成数据库和实体类 ...

  5. [转]Android 完美退出 App (Exit)

    本文转自:http://blog.csdn.net/zeus_9i/article/details/7259881 最近两天为了解决Android上面退出程序问题折腾了半死,在google & ...

  6. WebClient+Fiddler2完美搭配下载远程页面信息

    WebClient可以下载远程页面信息,这个大家应该都知道,核心代码如下: WebClient web = new WebClient(); string url = String.Format(&q ...

  7. GreenDao与Rx的完美搭配

    作为Android开发者,一定不会对 GreenDao 和 ReactiveX 陌生. GreenDao   号称Android最快的关系型数据库 ReactiveX    Rx是一个编程模型,目标是 ...

  8. GreenDao与ReactiveX的完美搭配

    转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6719380.html 作为Android开发者,一定不会对 GreenDao 和 ReactiveX 陌生 ...

  9. flask和pymongo的完美搭配

    1.如何进行mongo数据库的链接 import pymongo client = pymongo.MongoClient(host='192.168.*.*', port=27017,) db_au ...

随机推荐

  1. 关于Windows 7的64位系统不兼容某些控件的问题

    我的问题是vsflex7.ocx 不能在64位系统下运行,导致软件的一个涉及到这个控件的功能出错.如下: 解决的办法基本思路是把这个控件注册一下.然后就可以了.就是这个控件: 目录中没有自己下载个. ...

  2. sgu 176 Flow construction(有源汇的上下界最小流)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11025 [模型] 有源汇点的上下界最小流.即既满足上下界又满足 ...

  3. matlab特征值分解和奇异值分解

    特征值分解 函数 eig 格式 d = eig(A)         %求矩阵A的特征值d,以向量形式存放d. d = eig(A,B)       %A.B为方阵,求广义特征值d,以向量形式存放d. ...

  4. Hadoop2.0新特性-持续追加【干货】

    1.NAME NODE HA 2.NAME NODE Federation 3.HDFS 快照(目录快照) 4.HDFS 缓存 5.HDFS ACL 6.异构层级存储结构 -------------- ...

  5. linux信号量超过系统限制

    部署一台新服务器,信号量报错,观察也没有key冲突,错误分析及解决如下: 创建一个不存在的信号量集返回参数错误的报错,因为信号量集的信号量数量超过了系统限制. 系统默认 /home/poc#ipcs ...

  6. uva 10152 ShellSort

    //这个算法用到了"相对位置"的思想,并且就本题而言还有一个很重要的结论就是,假设 //移动了k个元素,那么这k个元素一定是最后结果的那个序列的前k个元素,而且易知, //越先移动 ...

  7. iOS 使用compare 进行对比

    compare 是 NSString 中的一个方法,这个方法是将字符串 按照 ACSII码表来进行对比. NSString *num1 = @"5.2.0"; NSString * ...

  8. Middleware课程01-概述

    中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源.中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯.是连接两个独立应用程序或独立系统的软件.相 ...

  9. Codeforces Round #172 (Div. 2) C. Rectangle Puzzle 数学题几何

    C. Rectangle Puzzle Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/281/p ...

  10. Chronometer控件实现的Android计时器

    本文为大家演示了如何使用Chronometer控件实现Android计时器的实例. 先贴上最终的实现效果图: Android计时器实现思路 使用Chronometer控件实现计器的操作.通过设置set ...