一.错误报告
1.perror()函数是一种简单、统一的方式报告错误。ansi c 函数库的许多函数调用操作系统来完成某些任务,I/O函数尤其如此。任何时候,当操作系统根据要求执行一些任何的时候,都存在失败的可能。标准库函数在一个外部整型变量errno(在errno.h中定义)中保存错误代码之后把这个信息传递给用户程序,提示操作失败的准确原因。
2.perror()函数的原型:
#include<stdio.h>
void perror(charconst *message);
如果message不是NULL并且指向一个非空的字符串,perror函数就打印出这个字符串,后面跟一个分号和一个空格,然后打印出一条用于解释errno当前错误代码的信息。
3.perrno函数的最大优点是容易使用。良好的编程实践要求任何可能产生错误的操作读应该在执行之后进行检查,确定它是否成功执行。
说明:
只有当一个库函数失败时,errno才会被设置。当函数成功执行时,errno的值不会被需改。因此,不能通过测试errno的值来判断是否有错误发生。所以只有当被调用的函数提示有错误发生时检查errno的值才有意义。
二.终止执行
2.它的原型为:
#include<stdlib.h>
void exit(intstatus);
3.status参数返回给操作系统,用于提示程序是否正常完成。
这个值和main()函数返回的整型状态值相同。预定义符号EXIT_SUCCESS和EXIT__FAILURE分别提示程序的终止是成功还是失败。
4.当程序发现错误情况使它无法继续执行下去时,可以使用该函数。我们经常会在调用perrno之后再调用exit终止程序
5.该函数没有返回值。当exit函数结束之后,程序已经消失。
三.文本流
1.流分为两种类型,文本(text)流和二进制流(binary)流。
2.文本流的有些特性在不同的系统中可能不同。其中之一就是文本的行的最大长度。 标准规定至少允许254个字符。另一个可能不同的特性是文本行的结束方式。
1>在MS-DOS系统中,文本行预定以一个回车符和一个换行符结尾。
2>在UNIX系统中只使用一个换行符结尾。
3.标准文本行定义为零个或多个字符,后面跟一个表示结束的换行符。
四.二进制流
1.二进制流中的字节将完全根据程序编写它们的形式写入到文件或设备中,而且完全根据它们从文件或设备读取的形式读入到程序中。
2.这种类型的流适用于非文本数据,但是如果I/O函数修改文本文件的行末字符,也可以把它用于文本文件。
五文件
1.stdio.h所包含的声明之一就是FILE结构。FILE是一个数据结构,用于访问一个流。
2.如果同时激活了几个流,每个流都有一个相应的FILE与它关联。为了在流上执行一些操作,可以调用一些合适的函数,并向它们传递一个与这个流关联的FILE参数。
3.对于每个ANSI C程序,运行时系统必须提供至少三个流:
1>标准输入(standard input):标准输入是缺省情况下输入的来源。
2>标准输出(standard output) :标准输出是缺省的输出设置
3>标准错误(standard error):就是错误写入的地方。Perror函数把它的输出也写到这个地方。在许多系统中,标准输出和标准错误在缺省情况下相同的。但是,为错误信息准备一个不同的流以为着,即使标准输出重定向到其他地方,错误信息仍将出现在屏幕或其他缺省的输出设备上。
这些流的名字分别是stdin、stout和stderr。它们都是一个指向FILE结构的指针。
4.许多操作系统允许用户在程序执行时修改缺省的标准输入和输出设备.
例如:
MS-DOS和UNIX系统都支持用下面的方法进行输入/输出重定向:program < data > answer
当该程序执行时,它将从文件data 而不是键盘作为标准输入进行读取,它将把标准输出写入到文件answer而不是屏幕上。
5.程序为必须同时活动状态的每个文件声明一个指针变量,其类型为FILE *。这个指针指向这个FILE结构,当它处于活动状态时由流使用。
6.流通过调用fopen函数打开。为了打开一个流,你必须指定需要访问的文件或设备以及它们的访问方式(例如:读、写或者既读又写)。fopen()和操作系统验证文件或设备确实存在并初始化FILE结构。然后,根据需要对该文件进行读取或写入。最后,调用flose函数关闭流。关闭一个流可以防止与它相关联的文件被再次访问,保证任何存储于缓冲区的数据被正确地写到文件中,并且释放FILE结构使它可以用于另外的文件。
7.I/O函数以三种基本的形式处理数据:单个字符、文本行和二进制数据。对于每种形式,都有一组特定的函数对它们进行处理。
8.打开流
1>fopen()函数打开一个特定的文件,并把一个流和这个文件相关联。原型如下:
FILE *fopen(char const *name,char const *mode);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。