第八章 文件
第八章 文件
■C文件概述 ▣文件类型指针 ·文件的打开和关闭 ■文件的读写 ■文件的定位 ■出错的检测 ■文件的输入输出小结
◼ C文件概述 ◼ 文件类型指针 ◼ 文件的打开和关闭 ◼ 文件的读写 ◼ 文件的定位 ◼ 出错的检测 ◼ 文件的输入输出小结
(一)C文件概述
(一)C文件概述
C文件概述 文件(le)是程序设计中一个重要的概念。 所谓“文件”一般指存储在外部介质上数据的集合。 一批数据是以文件的形式存放在外部介质(如磁盘)上的。 操作系统是以文件为单位对数据进行管理的,也就是说,如果想 找存在外部介质上的数据,必须先按文件名找到所指定的文件, 然后再从该文件中读取数据。要向外部介质上存储数据也必须先 建立一个文件(以文件名标识),才能向它输出数据。 以前各章中所用到的输入和输出,都是以终端为对象的,即从终 端键盘输入数据,运行结果输出到终端上。 从操作系统的角度看,每一个与主机相联的输入输出设备都看作 是一个文件。例如,终端键盘是输入文件,显示屏和打印机是输 出文件
C文件概述 文件(file)是程序设计中一个重要的概念。 所谓“文件”一般指存储在外部介质上数据的集合。 一批数据是以文件的形式存放在外部介质(如磁盘)上的。 操作系统是以文件为单位对数据进行管理的,也就是说,如果想 找存在外部介质上的数据,必须先按文件名找到所指定的文件, 然后再从该文件中读取数据。要向外部介质上存储数据也必须先 建立一个文件(以文件名标识),才能向它输出数据。 以前各章中所用到的输入和输出,都是以终端为对象的,即从终 端键盘输入数据,运行结果输出到终端上。 从操作系统的角度看,每一个与主机相联的输入输出设备都看作 是一个文件。例如,终端键盘是输入文件,显示屏和打印机是输 出文件
C文件概述 在程序运行时,常常需要将一些数据(运行的最终结果或中间数据)输出到磁盘 上存放起来,以后需要时再从磁盘中输入到计算机内存。这就要角到磁盘文件。 C语言把文件看作是一个字符(字节的序列,即由一个一个字符(字节的数据顺 序组成。 根据数据的组织形式,可分为ASCII文件和二进制文件。 ASCII文件又称文本(text)文件,它的每一个字节放一个ASCⅡ代码,代表一个字 符。 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。 如果有一个整数10000, 在内存中占4个字节,如果按ASCIⅡ码形式输出,则占5 字节,而按二进制形式输出,在磁盘上只占4个字节。用ASCI码形式输出与 美无彩汤颜 一一对应, 二个字节代表一个字符, 个字节代表一个字符,因而便于对 符进行逐个处理,也便于输出宝符 。但一 般点存储空间较多,而耳雾花费转 进制形式输出数值,可等省 外存空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式 般中闻结果数据需要暂时保存在外存上以后又需要输入到内存的,常用二进 制受件保存
C文件概述 在程序运行时,常常需要将一些数据(运行的最终结果或中间数据)输出到磁盘 上存放起来,以后需要时再从磁盘中输入到计算机内存。这就要用到磁盘文件。 C语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺 序组成。 根据数据的组织形式,可分为ASCII文件和二进制文件。 ASCII文件又称文本(text)文件,它的每一个字节放一个ASCII代码,代表一个字 符。 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。 如果有一个整数10000,在内存中占4个字节,如果按ASCII码形式输出,则占5 个字节,而按二进制形式输出,在磁盘上只占4个字节。用ASCII码形式输出与 字符一一对应,一个字节代表一个字符,一个字节代表一个字符,因而便于对 字符进行逐个处理,也便于输出字符。但一般占存储空间较多,而且要花费转 换时间(二进制形式与ASCII码间的转换)。用二进制形式输出数值,可以节省 外存空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式。 一般中间结果数据需要暂时保存在外存上以后又需要输入到内存的,常用二进 制文件保存
C文件概述 由前所述, 个C文件是一个字节流或二进制流。它把 数据看作是一连串的字符(字节,而不考虑记录的界限。 换句话说,C语言中文件并不是由记录record)组成的。 在C语言中对文件的存取是以字符(字节为单位的。输入 输出的数据流的开始和结束仅受程序控制而不受物理符 号(如回车换行符控制。 也就是说,在输出时不会自动增加回车换行符以作为记 录结束的标志,输入时不以回车换行符作为记录的间隔 (事实上C文件并不由记录构成)。我们把这种文件称为流 式文件。C语言允许对文件存取一个字符,这就增加了 处理的灵活性。 在C语言中,没有输入输出语句,对文件的读写都是用 库函数来实现的。ANSI规定了标准输入输出函数,用它 们对文件进行读写
C文件概述 由前所述,一个C文件是一个字节流或二进制流。它把 数据看作是一连串的字符(字节),而不考虑记录的界限。 换句话说,C语言中文件并不是由记录(record)组成的。 在C语言中对文件的存取是以字符(字节)为单位的。输入 输出的数据流的开始和结束仅受程序控制而不受物理符 号(如回车换行符)控制。 也就是说,在输出时不会自动增加回车换行符以作为记 录结束的标志,输入时不以回车换行符作为记录的间隔 (事实上C文件并不由记录构成)。我们把这种文件称为流 式文件。C语言允许对文件存取一个字符,这就增加了 处理的灵活性。 在C语言中,没有输入输出语句,对文件的读写都是用 库函数来实现的。ANSI规定了标准输入输出函数,用它 们对文件进行读写
C文件概述 有两种对文件的处理方法: 一种叫“缓冲文件系统”: 一种叫“非缓冲文件系统”。 所谓缓冲文件系统是指系统自动地在内存区为每一个正 在使用的文件名开辟一个缓冲区。从内存向磁盘输出数 据必须先送到内存中的缓冲区,装满缓冲区后才一起送 到磁盘去。如果从磁盘向内存读入数据,则一次从磁盘 文件将一批数据输入到内存缓冲区充满缓冲区),然后 再从缓冲区逐个地将数据送到程序数据区(给程序变量)。 如下图所示。缓冲区的大小由各个具体的C版本确定, 一般为512字节
C文件概述 有两种对文件的处理方法: 一种叫“缓冲文件系统” ; 一种叫“非缓冲文件系统” 。 所谓缓冲文件系统是指系统自动地在内存区为每一个正 在使用的文件名开辟一个缓冲区。从内存向磁盘输出数 据必须先送到内存中的缓冲区,装满缓冲区后才一起送 到磁盘去。如果从磁盘向内存读入数据,则一次从磁盘 文件将一批数据输入到内存缓冲区(充满缓冲区),然后 再从缓冲区逐个地将数据送到程序数据区(给程序变量)。 如下图所示。缓冲区的大小由各个具体的C版本确定, 一般为512字节
输出文件缓冲区 磁盘 程序数据区 输出 输出 输入文件缓冲区 输入 输入
C文件概述 离提波蝶浩高露乔务朵塑奔接易歪确定大小 在UNX系统下,用缓冲文件系统来处理文本文件,用 非缓冲文件系统处理二进制文件。 用缓冲文件系统进行的输入输出又称为高级(或高层)磁 盘输入输出(高层I/O)。 用非缓冲文件系统进行的输入输出又称为低级(低层)输 入输出系统。 ANSI C标准决定不采用非缓冲文件系统,而只采用缓冲 文件系统。即既用缓冲文件系统处理文本文件,也用它 来处理三进制文件。也就是将缓冲文件系统扩充为可以 处理二进制文件。 本章只介绍ANSI C规定的文件系统以及对它的读写
C文件概述 所谓“非缓冲文件系统”是指系统不自动开辟确定大小 的缓冲区,而由程序为每个文件设定缓冲区。 在UNIX系统下,用缓冲文件系统来处理文本文件,用 非缓冲文件系统处理二进制文件。 用缓冲文件系统进行的输入输出又称为高级(或高层)磁 盘输入输出(高层I/O)。 用非缓冲文件系统进行的输入输出又称为低级(低层)输 入输出系统。 ANSI C标准决定不采用非缓冲文件系统,而只采用缓冲 文件系统。即既用缓冲文件系统处理文本文件,也用它 来处理二进制文件。也就是将缓冲文件系统扩充为可以 处理二进制文件。 本章只介绍ANSI C规定的文件系统以及对它的读写
(二)文件类型指针
(二)文件类型指针