C和指针 第15章 输入/输出函数 15.1 错误报告

输入/输出函数
    和早期的C相比,ANSI C的一个最大优点就是它在规范里包含了函数库。每个ANSI编译器必须支持一组规定的函数,并具备规范所要求的结构,而且按照规定的行为工作。这种情况较之早期的C是一个巨大的改进。以前,不同的编译器可以通过或扩展普通函数库的功能来进行“改善”。这些改变可能在那个做出修改的特定系统上很有用,但它们却限制了可移植性,因为依赖这些修改的代码在缺乏这些修改(或者具有不同修改)的其他编译器上将会失败。
    ANSI编译器并未被禁止在它们的函数库的基础上增加其他函数。但是,标准函数必须根据标准所定义的方式执行。如果大家关心可移植性,只要避免使用任何非标准函数就可以了。
    本节讨论ANSI C的输入和输出(I/O)函数。我们首先学习两个非常有用的函数,它们用于报告错误以及对错误做出反映。
    15.1 错误报告
    perror函数以一种简单、统一的方式报告错误。ANSI C函数库的许多函数调用操作系统来完成某些任务,I/O函数尤其如此。任何时候,当操作系统根据要求执行一些任务的时候,都存在失败的可能。例如,如果一个程序试图从一个并不存在的磁盘文件读取数据,操作系统除了提示发生错误之外就没什么好做的了。而标准库函数在一个外部整型变量errno(在errno.h中定义)中保存错误代码之后把这个信息传递给用户程序,提示操作失败的准确原因。
    perror函数简化向用户报告这些特定错误的过程。它的原型定义于stdio.h,如下所示:
    void perror( char const *message );
    如果message不是NULL并且指向一个非空的字符串,perror函数就打印出这个字符串,后面跟一个分号和一个空格,然后打印出一条用于解释error当前错误代码的信息。
    提示:
    perror最大的优点就是容易使用。良好的编程实践要求可能产生错误的操作都应该在执行之后进行检查,确定它是否成功执行。即使是那些十拿九稳不会失败的操作也应该进行检查,因为它们迟早可能失败。这种检查需要稍许额外的工作,但与可能付出的大量调试时间相比,它们还是非常值得的。perror将在本章许多地方进行说明。
    注意,只有当一个库函数失败时,才会设置errno。但函数成功运行时,errno的值不会被修改。这意味着我们不能通过测试errno的值来判断是否有错误发生。反之,只有当被调用的函数提示有错误发生时,检查errno的值才有意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值