C语言文件了解

来源:C语言文件操作完全攻略 (biancheng.net)

数据的输入和输出几乎伴随着每个 C 语言程序,所谓输入就是从“源端”获取数据,所谓输出可以理解为向“终端”写入数据。这里的源端可以是键盘、鼠标、硬盘、光盘、扫描仪等输入设备,终端可以是显示器、硬盘、打印机等输出设备。在 C 语言中,把这些输入和输出设备也看作“文件”

计算机上的各种资源都是由操作系统管理和控制的,操作系统中的文件系统,是专门负责将外部存储设备中的信息组织方式进行统一管理规划,以便为程序访问数据提供统一的方式。

文件是操作系统管理数据的基本单位,文件一般是指存储在外部存储介质上的有名字的一系列相关数据的有序集合。它是程序对数据进行读写操作的基本对象。在 C 语言中,把输入和输出设备都看作文件。
文件一般包括三要素:文件路径、文件名、后缀。

文件名:标识文件名字的合法标识符,如 ch10、file_1 等都是合法的文件名。

后缀:一般用于标明文件的类型,使用方式为:文件名.后缀,即文件名与后缀之间用 '.' 隔开。常见的后缀类型有:doc、txt、dat、c、cpp、obj、exe、bmp、jpg 等。

流的概念及分类

流是逻辑的抽象的

I/O 设备的多样性及复杂性,给程序设计者访问这些设备带来了很大的难度和不便。为此,ANSIC 的 I/O 系统即标准 I/O 系统,把任意输入的源端或任意输出的终端,都抽象转换成了概念上的“标准 I/O 设备”或称“标准逻辑设备”。程序绕过具体设备,直接与该“标准逻辑设备”进行交互,这样就为程序设计者提供了一个不依赖于任何具体 I/O 设备的统一操作接口,通常把抽象出来的“标准逻辑设备”或“标准文件”称作“流”。

把任意 I/O 设备,转换成逻辑意义上的“标准 I/O 设备”或“标准文件”的过程,并不需要程序设计者感知和处理,是由标准 I/O 系统自动转换完成的。故从这个意义上,可以认为任意输入的源端和任意输出的终端均对应一个“流”。

文件按其逻辑结构可分为:记录文件和流式文件。而记录文件又可分为:顺序文件、索引文件、索引顺序文件及散列文件等。

流式文件是以字节为单位,对流式文件的访问一般采用穷举搜索的方式,效率不高,故一般需频繁访问的较大数据不适宜采用流式文件逻辑结构。但由于流式文件管理简单,用户可以较方便地对文件进行相关操作。

流按方向分为:输入流和输出流。从文件获取数据的流称为输入流,向文件输出数据称为输出流。

流按数据形式分为:文本流和二进制流。文本流是 ASCII 码字符序列,而二进制流是字节序列。

 

对于计算机来说,一切皆数据,能存放数据的方式有很多种,如内存,文件,数据库等,文件是极其重要的一种。

1. 文本数据和二进制数据

1. 1 文本数据

把要存储的数据当成一系列字符组成,把每个字符的 ASCII 码值存入文件中。每个 ASCII 码值占一个字节,每个字节表示一个字符。故文本文件也称作字符文件或 ASCII 文件,是字符序列文件(文本数据,能用文本工具打开看懂得文字)

1.2 二进制数据

把数据对应的二进制形式存储到文件中,是字节序列文件(二进制数据,文本工具打开,不能识别的文字,显示乱码)

字符'1''2''3'
ASCII(十进制) 49 50 51
ASCII(二进制) 0011 0001 0011 0010 0011 0011

2.缓冲和非缓冲文件系统

C语言中文件系统可分为两大类,一种是缓冲文件系统也称为标准文件系统,另一种是非缓冲文件系统。ANSI C 标准中只采用缓冲文件系统。

2.1 缓冲文件系统

缓冲文件系统:系统自动为每个打开的文件在内存开辟一块缓冲区,缓冲区的大小一般由系统决定。当程序向文件中输出(写入)数据时,程序先把数据输出到缓冲区,待缓冲区满或数据输出完成后,再把数据从缓冲区输出到文件;当程序从文件输入(读取)数据时,先把数据输入到缓冲区,待缓冲区满或数据输入完成后,再把数据从缓冲区逐个输入到程序。


2.2 非缓冲文件系统

非缓冲文件系统:系统不自动为打开的文件开辟内存缓冲区,由程序设计者自行设置缓冲区及大小。


程序每一次访问磁盘等外存文件都需要移动磁头来定位磁头扇区,如果程序频繁地访问磁盘文件,会缩短磁盘的寿命,况且速度较慢,与快速的计算机内存处理速度不匹配。
带缓冲区文件系统的好处是减少对磁盘等外存文件的操作次数,先把数据读取(写入)到缓冲区中,相当于把缓冲区中的数据一次性与内存交互,提髙了访问速度和设备利用率。
一般把带缓冲文件系统的输入输出称作标准输入输出(标准 I/O),而非缓冲文件系统的输入输出称为系统输入输出(系统 I/O)。

ANSI C 为正在使用的每个文件分配一个文件信息区,该信息区中包含文件描述信息、 该文件所使用的缓冲区大小及缓冲区位置、该文件当前读写到的位置等基本信息。这些信息保存在一个结构体类型变量中,该结构体类型为 FILE 在 stdio.h 头文件中定义,不允许用户改变。
每个 C 编译系统 stdio.h 文件中的 FILE 定义可能会稍有差别,但均包含文件读写的基本信息。

posted @ 2020-12-02 22:14  石头,等待  阅读(857)  评论(0编辑  收藏  举报