C语言文件的概念和文件指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言文件的概念和文件指针相关的知识,希望对你有一定的参考价值。

  1 C语言文件的概念

  在程序中,当调用输入函数从外部文件中输入数据赋给程序中的变量时,这种操作成为“输入”或“读”;当调用输出函数把程序中变量的值输出到外部文件中时,这种操作称为“输出”或“写”。

  C 语言中,对于输入、输出的数据都按“数据流”的形式进行处理。也就是说,输出时,系统不添加任何信息;输入时,逐一读入数据,直到遇到 EOF 或文件结束标志就停止。C 程序中的输入、输出文件都以数据流的形式存储在介质上。

  对文件的输入、输出方式也称为“存取方式”。C 语言中,有两种对文件的存取方式:顺序存储和直接存取。

  (1)顺序存取文件的特点:每当“打开”这类文件,进行读或写操作时,总是从文件的开头开始,从头到尾顺序读或写。也就是说,当顺序存取文件时,要读第 n 个字节,先要读取前 n-1 个字节,而不能一开始就读到第 n 个字节;要写第 n 个字节,先要写前第 n-1 个字节。

  (2)直接存取文件又称随机存取文件,其特点是:可以通过调用 C 语言的库函数去指定开始读或写的字节号,然后直接对此位置上的数据进行读,或将数据写到此位置上。

  数据可以按文本形式或二进制形式存放在介质上,因此文件可以按数据的存放形式分为文本文件和二进制文件。

  (1)所谓文本文件指的是,当输出时,数据转换成一串字符,每个字符以字符的 ASCII 码值存储到文件中,一个字符占一个字节。当用 printf 函数进行输出时就进行了这样的转换,并在内部处理过程中指定输出文件的终端为屏幕。反之当输入时,又把指定的一串字符按类型转换成数据,并存入内存,比如当调用 scanf 函数进行输入时就进行了这种转换,并在内部处理过程中指定输入终端为键盘。

  (2)当数据按二进制形式输出到文件中时,数据不经过任何转换、按计算机内的存储形式直接存储到硬盘上。也就是说,对于字符型数据,每个字符占一个字节;对于 int 类型数据,每个数据占两个字节;float 类型的每个数据占四个字节。当从二进制文件读入数据时,不必经过任何转换,而直接将读入的数据存入变量所占的内存空间。由此可以见,因为不存在转换的操作,从而提高了对文件输入输出的速度。注意:不能将二进制数据直接输出到终端屏幕,也不能从键盘输入二进制数据。

  ANSI 标准规定,在对文件进行输入或输出的时候,系统将为输入或输出文件开辟缓冲区。所谓“缓冲区”,是系统在内存中为各文件开辟的一片存储区。当对某文件进行输出时,系统首先把输出的数据填入为该文件开辟的缓冲区内,每当缓冲区被填满时,就把缓冲区中的内容一次性的输出到对应文件中;当从某文件输入数据时,首先将从输入文件中输入一批数据放入到该文件的内存缓冲区中,输入语句将从该缓冲区中依次读取数据,当该缓冲区中的数据被读完时,将再从输入文件中输入一批数据放入。这种方式使得读、写操作不必频繁地访问外部设备,从而提高了读、写操作的速度。

  2 文件指针

  文件指针实际上是指向一个结构体类型的指针,这个结构体中包含有诸如:缓冲区的地址、在缓冲区中当前存取的字符的位置、对文件是“读”还是“写”、是否出错、是否已经遇到文件结束标志等信息。用户不必去了解其中的细节,所有一切都在 stdio.h 头文件中进行了定义。一般称上面提到的结构体类型名为 FILE,定义文件类型指针变量的一般形式为:

    FILE *指针变量名;

  例如:

    FILE *fp1, *fp2;

  fp1 和 fp2 均被定义为指向文件类型的指针变量,称为文件指针。

以上是关于C语言文件的概念和文件指针的主要内容,如果未能解决你的问题,请参考以下文章

C语言 结构体指针字符 二进制文件写入和读取

C语言函数指针详解

C语言中文件指针指向啥?

C语言晋级--ANSI C文件管理

C语言复习——指针 链表 与 文件操作

C语言提高内容目录