- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
文件-Piazza
C 语言程序设计文件 周闻钧 朱宏明 本讲内容 文件的概念 文件指针 文件的读写 文件的定位 文件 所谓“文件”一般指:存储在外部介质上数据的集合,一批数据是以文件的形式存放在外部介质(如磁盘)上的 操作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。向外部介质上存储数据也必须先建立一个文件(以文件名标识),才能向它输出数据 文件 C语言把文件看作是一个字符(字节)的序列,即由一个个字符(字节)的数据顺序组成。根据数据的组织形式,可分为ASCII文件和二进制文件 ASCII文件又称文本(text)文件,它的每一个字节放一个ASCII代码,代表一个字符 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。如果有一个整数10000,在内存中占2个字节,如果按ASCII形式输出,则占5个字节,而按二进制形式输出,在磁盘上只占2个字节。用ASCII码形式输出与字符一一对应 文件 一个字节代表一个字符,因而便于对字符进行逐个处理,也便于输出字符。但一般占存储空间较多,而且要花费转换时间(二进制形式与ASCII码间的转换) 用二进制形式输出数值,可以节省外存空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式。一般中间结果数据需要暂时保存在外存上以后又需要输入到内存的,常用二进制文件保存 文件 一个C文件是一个字节流或二进制流 它把数据看作是一连串的字符(字节),而不考虑记录的界限 换句话说,c语言中文件并不是由记录(record)组成的(这是和PASCAL或其它高级语言不同的) 文件 在C语言中对文件的存取是以字符(字节)为单位的。输入输出的数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制。我们把这种文件称为流式文件。C语言允许对文件存取一个字符,就增加了处理的灵活性。 在过去使用的C版本(如unix系统下使用的C)有两种对文件的处理方法: 一种叫“缓冲文件系统”, 一种叫“非缓冲文件系统” 文件 所谓缓冲文件系统是指:系统自动地在内存区为每一个正在使用的文件名开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程序变量)。缓冲区的大小由各个具体的C版本确定,一般为512字节 所谓“非缓冲文件系统”是指系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区 文件 在UNIX系统下,用缓冲文件系统来处理文本文件,用非缓冲文件系统处理二进制文件 用缓冲文件系统进行的输入输出又称为高级(或高层)磁盘输入输出(高层I/O),用非缓冲进行的输入输出又称为低级(低层)输入输出系统 1983年ANSI C标准决定不采用非缓冲文件系统,而只采用缓冲文件系统。即既用缓冲文件系统处理文本文件,也用它来处理二进制文件。也就是将缓冲文件系统扩充为可以处理二进制文件 在C语言中,没有输入输出语句,对文件的读写都是用库函数来实现的 文件类型指针 缓冲文件系统中,关键的概念是--文件指针。每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等)。这些信息是保存在一个结构体类型的变量中的。该结构体类型是由系统定义的,取名为FILE typedef struct { int _fd; /*文件号*/ int _cleft; /*缓冲区中剩下的字符*/ int _mode; /*文件操作模式*/ char _nextc;/*下一个字符位置*/ char _buff;/*文件缓冲区位置*/ }FILE; 文件类型指针 在vc中的定义 #ifndef _FILE_DEFINED struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE; #define _FILE_DEFINED #endif 文件类型指针 有了FILE类型之后,可以用它来定义若干个FILE类型的变量,以便存放若干个文件的信息 可以定义以下FILE类型的数组。FILE _efile[5] 可以定义
文档评论(0)