首页 理论教育C语言文件数据类型简介

C语言文件数据类型简介

【摘要】:二进制文件的特点是存储效率较高,但不便于程序中直观地进行数据处理。非缓冲文件系统指的是不由系统开辟文件缓冲区,而是由程序员为用到的每个文件设置数据缓冲区,并自行对文件缓冲区进行管理。C语言中,用一个系统已经构造好的文件类型变量来保存这些信息。

1.文件的概念和作用

文件是指具名存放在外部存储设备上的一组信息,它们以二进制代码形式存在,可能是一组数据、一个程序,一张照片、一段声音等。在计算机应用中,文件的概念具有更广泛的意义,它甚至包含所有的计算机外部设备,这样的文件称为“设备文件”。对于结构化程序设计语言而言,文件是其处理的最重要的外部数据,通过在程序设计中使用文件可以达到以下两个目的:

①将数据永久地保存在计算机外部存储介质上,使之成为可以共享的信息,即通过文件系统与其他信息处理系统联系。

②可以进行大量的原始数据的输入和保存,以适应计算机系统在各方面的应用。

2.文件的分类

文件按照不同的分类原则可以有不同的分类方法,主要有以下几种文件的分类方法:

①按文件的结构形式分类可以分为文本文件和二进制文件。

文本文件是全部由字符组成的文件,即文件的每个元素都是字符或换行符。即使是整数或者实数在文本文件中也是按其对应的字符存放的。由于文件每个元素都是用ASCII码字符来表示的,所以文本文件又称为ASCII码文件。例如,1234567作为整型常量看待时仅需4个字节即可表示,但存放到文本文件中去时,由于一个ASCII码字符占用一个字节的存储空间,那么就需占用7个字节空间来存放。文本文件的特点是存储效率较低,但便于程序中对数据的逐字节(字符)处理。

二进制文件是把数据按其在内存中的存储形式原样存放到计算机外部存储设备,这类文件可以节省计算机外存空间。例如,在32位系统中,存放整数1234567时,按文本方式需要7个字节,按二进制方式仅需4个字节。二进制文件的特点是存储效率较高,但不便于程序中直观地进行数据处理

②按文件的读写方式分类可以分为顺序存取文件和随机文件。

文件的顺序存取指的是,读/写文件数据只能从第一个数据位置开始,依次处理所有数据直至文件中数据处理完成。

文件的随机存取指的是可以直接对文件的某一元素进行访问(读或者写)。C程序中随机访问文件包括寻找读写位置和读写数据两个步骤,C编译系统中都提供了实现随机读取文件中任意数据元素所需要的函数。

③按文件存储的外部设备分类可以分为磁盘文件和设备文件。

磁盘文件的作用是,既可以将程序运行过程中产生的数据信息输出到磁盘上保存,也可以从磁盘中将数据读取到程序中(内存中)进行处理。(www.chuimin.cn)

在程序设计中,将所有计算机系统外部设备也作为文件对待,这样的文件称为设备文件。C程序设计中常用的标准设备文件有:KYBD:(键盘)、SCRN:(显示器)、PRN或LPT1:(打印机)等。还有3个特殊设备文件,它们由系统分配和控制,进入系统时自动打开,退出系统时自动关闭,不需要程序设计人员控制。这3个标准设备文件是:

·stdin:(标准输入文件)由系统指定为键盘;

·stdout:(标准输出文件)由系统指定为显示器;

·stderr:(标准错误输出文件)由系统指定为显示器;

C语言中,将磁盘文件和设备文件都作为相同的逻辑文件对待,对这些文件的操作(输入和输出等)都采用相同方法进行。这种逻辑上的统一为C程序设计提供了极大的便利,从而使得C标准函数库中的输入输出函数既可以用来处理通常的磁盘文件,又可以用来对计算机系统的外部设备进行控制。

④按系统对文件的处理方法分类可以分为缓冲文件系统和非缓冲文件系统。

缓冲文件系统是指系统自动地在内存中为每一个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,待缓冲区装满后才将整个缓冲区的数据一起送到磁盘文件中保存。如果从磁盘文件向系统内存读入数据,则从磁盘文件中一次读入一批数据到系统缓冲区,然后再从数据缓冲区中将数据送到对应程序的变量数据存储区。

非缓冲文件系统指的是不由系统开辟文件缓冲区,而是由程序员为用到的每个文件设置数据缓冲区,并自行对文件缓冲区进行管理。

1983年ANSI C标准决定放弃采用非缓冲文件系统而只使用缓冲文件系统,无论是文本文件还是二进制文件都使用缓冲文件系统进行处理。

3.文件数据类型和文件类型指针变量

在缓冲文件系统中,对文件的处理都是通过在内存中开辟一个缓冲区来存取文件的相关信息,如文件的名字、状态、文件读写指针的当前位置等,这些关于文件处理的信息在整个文件处理的过程中必须妥善保存。C语言中,用一个系统已经构造好的文件类型(FILE)变量来保存这些信息。

C程序在处理文件时,对任何一个正在处理的文件都会自动定义一个FILE类型的变量,将对文件的各种描述信息和控制信息存放在该变量中,程序中对这个FILE类型变量的操作需要通过指向它的指针来进行,文件处理的程序中,需要定义一个FILE数据类型的指针变量(称为文件指针),当建立或者打开文件时系统就自动建立一个FILE类型变量并将文件的有关信息存放到该变量中,然后将变量的地址赋给文件类型(FILE类型)指针变量,使得文件指针与被打开文件建立起关联。文件指针和特定文件的关联建立起来后,此后的代码中既可通过文件指针对该文件中的数据进行各种各样的操作。在应用程序中如果需要同时处理若干个文件,则需要定义若干个文件类型指针。定义文件类型指针变量的方法与定义其他类型变量的方法类似,其一般形式如下:

FILE*fp;