- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 输入出与底层接口
输入输出与低层接口
输入输出、串处理、存储管理等在C中都是通过调用标准库函数和宏定义实现的,另外C程序还可以与操作系统的接口(低层接口)实现输入输出和存储管理。
文件是在内存以外的媒体(或设备)上的某种形式组织的数据集合,可以按文件名来存取。任何计算机系统都包括文件系统,对应文件的组织和存取进行管理,对于C来说,一切能进行输入输出C设备,包括终端打印机,磁盘等均称之为文件(外部文件),输入输出函数和低层接口实现了内存中的C程序与文件间的数据交换。
标准输入输出函数是通过操作FILE类型(stdio.h中定义的结构类型)的指针(称之为文件指针)实现对文件的存取,用这种方式存取的文件称流式文件,来源于流式文件或输出到流式文件的字节序列称为流。流式文件通常是有缓冲区的。低层接口是通过操作文件描述符(int整数)实现对文件的存取,用这种方式存取的文件称为非流式文件,非流式文件的存取无缓冲区,无格式的。
文件处理的一般步骤为:(1)首先打开文件,建立文件指针或文件描述符与外部文件的联系。(2)通过文件指针或文件描述符进行读/写操作,(3)关闭文件,切断文件指针或文件描述符与外部文件的联系。在程序初启时,有三个标准流式文件被自动打开:标准输入文件(文件指针为stdin),标准输出文件(文件指针为stdout),标准错误文件(文件指针为stderr),它们都对应于终端设备。
流式文件输入输出
标准输入输出支持两种形式的流式文件:文本文件和二进制文件。文本文件是分行的字符序列,每行为0个或多个字符再加上行结束符(’\n’)组成。由于不同OS环境下,文本的表示不一定相同,所以文本流的字符与外部表示的字符之间不一定存在一一对应关系(例如行结束符,在有的系统是外部表示为’\n’,’\r’ ‘\n’(两个字符)二进制文件是一个内部表示的数据序列,每个数据都具有相同的存储结构。头文件“stdio.h“说明了流式文件处理函数的原型。
9.1.1 文件的打开与关闭
函数fopen和freopen用来打开文件,fclose用来关闭文件。
(1)FILE *fopen(const char *filename, const char *mode)
fopen打开名为filename(或文件的路径)的文件,它返回一个指向打开文件的指针,如果打开失败,则返回NULL,参数mode指明打开文件的方式,它可以是下列值之一:
“r” 打开用于读的文本文件(文件必须已经存在)
“w” 创建(并打开)用于写的文本文件,如果该文件已存在,则被替换为空文件。
“a” 在文件的尾进行添加,打开或创建用于写的文本文件。
“rb” 打开用于读的二进制文件。
“wb” 创建(并打开)用于写的二进制文件。
“ab” 在二进制文件的尾部进行添加。
“r+” 打开用于更新的文本文件(文件必须已经存在)。
“w+” 创建用于更新的文本文件,如果该文件存在则被替换为空文件。
“a+” 在文件尾部进行添加,打开并创建用于更新的文本文件。
“rb+” 对二进制文件进行上述操作。
“wb+”
“ab+”
加上一个“+“其区别在于由单一的只读或只写方式扩展为又能写的方式。但从读转为写(或写转为读)时,其间必须调用fflush或定位函数。文件名最多允许FILENAME_MAX个字符,至多有FOPEN_MAX个文件同时被打开,上述两上符号常量是在stdio.h中定义的常量,所有作为输入、输出函数参数的符号常量,都在stdio.h中定义。
以上是ANSI C的规定,可以看到它能够处理文本文件或二进制文件,但有些目前使用的C语言缓冲文件系统不具备上述所有功能,如只能用”r”,”w”,”a”方式处理文本文件,而不能用”rb”,”wb”,”ab”方式处理二进制,有如C编译器,不用”r+”.”w+”,”a+”而用”rw”,”wr”,”ab”等,需要查阅相关资料或上机调试。
例如:
if (fp=fopen(“xx.dat”,”r”))==NULL)
{ printf(“Cannot open %s\n”,”xx.dat”);
exit(-1);
}
以只读方式打开一个名为xx.dat的正文文件,如果打开失败,打印”Cannot open xx.dat”并调用exit函数终止运行。
(2) FILE *freopen(const char *filename, const char *mode, FILE *stream)
关闭stream当前所代表的文件,按mode指定方式重新建立stream与filename文件的联系,函数的返回值为参数stream,如果出错,则返回值NULL,此时老文件被关闭,freopen主要用于改变stdin,stdout和stderr所联系的文件(使标准设备
文档评论(0)