错误:UNIX 程序中的错误代码
使用标准错误机制进行处理
级别: 中级
Chris Herborth (chrish@), 自由撰稿人, 作者
学习 errno 全局变量,从而获得更多您想了解的有关 UNIX 标准错误报告机制的知识。您还将了解两个关联的全局变量(sys_nerr 和 sys_errlist),并了解有助于向用户报告错误的标准函数。
引言
UNIX? 开发人员常常忽视进行适当的错误检测和恢复。缺乏 C 语言的异常和标准 C 库的基本错误机制确实会导致出现此种情况。通过本文,您将熟悉标准 C 库中的 UNIX 错误报告,并且有望以用户友好的方式报告和处理错误。
现在就开始学习本文吧!
开始之前
如果想随同本文一起学习代码示例,将需要下载源代码存档(除非您想亲自键入它)。我将使用 C/C++ Development Tooling (CDT) 在 Eclipse 中进行处理。如果您以前未曾使用过 Eclipse,则可转到参考资料部分中的链接,它们有助于您了解 Eclipse 的入门知识。
代码示例是相当琐碎的,但使用诸如 Eclipse 之类的集成开发环境 (IDE) 可使打开系统头文件、查找特定符号等操作变得更容易。Eclipse (3.2) 的最新版本和 CDT 插件 (2.0) 包含了很有帮助的强大功能。
C 程序中的错误报告
C 语言是 UNIX 平台上最常用的编程语言。尽管其他语言在 UNIX 上很普及(如 Java?、C++、Python 或 Perl),但系统的所有应用程序编程接口(Application Programming Interface,API)均已为 C 语言而创建。标准 C 库(每个 C 编译器套件的一部分)是设立诸如可移植操作系统接口(Portable Operating System Interface,POSIX)和 Single UNIX Specification 之类的 UNIX 标准的基础。
20 世纪 70 年代早期开发 C 和 UNIX 时,在发生某一条件时中断应用程序流的异常还是相当新或尚不存在的概念。库只得使用其他约定来报告错误。
当钻研 C 库或几乎任何其他 UNIX 库时,您将会发现报告故障的两种常用方法:
函数返回错误代码或成功代码;如果是错误代码,则代码本身可用于指出何处出错。
函数返回特定值(或值范围)以指明错误,且设置全局变量 errno 以指明问题的起因。
errno 全局变量(或者,更准确地说应为“符号”,因为在具有线程安全的 C 库的系统上,errno 实际上是一个可确保每个线程都具有其各自的 errno 的函数或宏)在 errno.h 系统头文件中定义,并且其所有的可能值都定义为标准常量。
第一个类别中的许多函数实际上会返回标准 errno 代码中的一个,但是,如果不检查手册页上的“返回”部分,则无法预知函数的行为方式。如果运气好的话,函数的手册页会列出其可能返回的所有值,以及它们在此特定函数的上下文中所指的含义。第三方库通常具有单个约定,该库中的所有函数都会遵循此约定,但是,在做出任何假定之前,您将必须再次检查该库的文档。
让我们快速地了解一些代码演示 errno 的情况,并了解可用于将错误代码转换成可读性更强的内容的几个函数。
报告故障
在清单 1 中,您将看到一个简短程序,该程序尝试打开一个不太可能存在的文件,并使用两种不同的方法向运行该程序的用户报告错误。
清单 1. errno 变量记录故障
// errno for fun and profit
#include stdio.h
#include fcntl.h
#include stdlib.h
#include errno.h
#include string.h
const char *FILE_NAME = /tmp/this_file_does_not_exist.yarly;
int main( int argc, char **argv )
{
int fd = 0;
printf( Opening %s...\n, FILE_NAME );
fd = open( FILE_NAME, O_RDONLY, 0644 );
if( fd 0 ) {
// Error, as expected.
perror( Error opening file );
printf( Error opening file: %s\n, strerror( errno ) );
}
return EXIT_SUCCESS;
}
运行此程序
您可能关注的文档
- 金色美梦花之恋爱尊贵燕窝果香悠扬芒果狂热鲜果季节.ppt
- 金融体系与产业结构的耦合协调度分析.pdf
- 金融计量分析应用教学大纲.doc
- 金银草发酵产沼气研究-中国沼气网.pdf
- 金黄凝胶对大鼠急性软组织损伤的治疗作用研究.pdf
- 针刺治疗双相抑郁障碍的心境稳定作用研究.ppt
- 针对云计算的企业风险管理-中国会计视野.pdf
- 针对非连通流形数据降维的过渡曲线方法.pdf
- 钎料感应钎焊Q235钢螺柱.pdf
- 钙硅比对水化硅酸钙加速碳化的影响-硅酸盐学报.pdf
- (正式版)DB51∕T 1867-2014 《袋栽黑木耳生产技术规程》.docx
- (正式版)DB51∕T 2413-2023 《油橄榄密植丰产栽培技术规程》.docx
- (正式版)DB51∕T 2436-2017 《川菜东坡一品肉烹饪工艺技术规范》.docx
- (正式版)DB51∕T 2396-2017 《农村电子商务服务站(点)服务与管理规范》.docx
- (正式版)DB51∕T 2419-2017 《桢楠扦插育苗技术规程》.docx
- CN105145773B 一种无花果曲奇饼干及其制作方法 (江苏农林职业技术学院).docx
- CN105203825A 微测量电极的制作方法和热电势的测量方法及相关装置 (国家纳米科学中心).docx
- CN105137533B 一种啁啾光纤光栅及其制作方法 (南京航空航天大学).docx
- (正式版)DB51∕T 2453-2018 《巴山新居公共管理指南》.docx
- (正式版)DB51∕T 1892-2014 《川西北地区沙化土地治理技术规程》.docx
最近下载
- 星原教育计划书.pptx
- 2025年高考数学真题卷(全国二卷)附答案解析.pdf VIP
- 五年级语文老师家长会课件(完美版).ppt VIP
- 《预防水痘》PPT班会课件通用ppt模板.pptx VIP
- 1.2+组织之趣+课件+2025-2026学年人教版初中美术八年级下册.pptx VIP
- 信号完整性分析软件:Cadence Sigrity二次开发_(16).CadenceSigrity二次开发案例分析.docx VIP
- 2024年八年级劳动与技术试题(附答案).docx VIP
- 2025年青岛市局属高中中考自主招生化学试卷真题(含答案详解).pdf VIP
- DB5133T 63-2022 牦牛标准化育肥场布局及圈舍建设规范.docx VIP
- (正式版)DB51∕T 1853-2014 《牦牛越冬圈舍建设规范》.docx VIP
原创力文档

文档评论(0)