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 均被定义为指向文件类型的指针变量,称为文件指针。

时间: 2024-12-17 21:37:46

C语言文件的概念和文件指针的相关文章

「C语言」文件的概念与简单数据流的读写函数

写完「C语言」单链表/双向链表的建立/遍历/插入/删除 后,如何将内存中的链表信息及时的保存到文件中,又能够及时的从文件中读取出来进行处理,便需要用到”文件“的相关知识点进行文件的输入.输出. 其实,就算不懂得链表,也完全可以学习”文件“相关知识点,但在此之前最好有”指针“基础. 本篇文章整理自<C语言程序设计教程--人民邮电出版社>第十二章——文件,以作文件探讨. 一.数据流与文件概念 二.文件的打开与关闭 三.文件的顺序读写 四.文件的随机读写 一.数据流与文件概念 1.数据流 数据的输入

一起talk C栗子吧(第一百四十三回:C语言实例--文件操作:基于文件指针三)

各位看官们,大家好,上一回中咱们说的是基于文件指针进行文件操作的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中详细地介绍了标准库中与文件操作相关的函数.不过,限于时间的原因,没有举具体的例子.还是那句老话,只说不练,不是我们的风格.因此,今天我们将通过具体的例子来说明如何使用文件指针来操作文件. 对文件的操作,还是使用我总结的文件操作三步曲比较好: p_file = fopen(file_name,"w"); //打开文件 re

文件描述符和文件指针的区别

文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数.每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针. 文件指针:C语言中使用文件指针做为I/O的句柄.文件指针指向进程用户区中的一个被称为FILE结构的数据结构.FILE结构包括一个缓冲区和一个文件描述符.而文件描述符是文件描述符表的一个索引,因此从某种意义上说文件指针就是句柄的句柄(在Windows系统上,文件描述符

浅谈文件描述符与文件指针

一.文件描述符: 内核利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描述符. 1.优点: 1.基于文件描述符的I/O操作兼容POSIX(可移植操作系统接口)标准 2.UNIX/LINUX的系统调用中,大量系统调用都依赖于文件描述符 2.缺点: 1.在非UNIX/LINUX操作系统上,无法基于这一概念进行编程 2.它在形式上不过是个整数,当代码量增大时,会使编程者难以分清哪些整数是数据,哪些是文件描述符.所以完成的代码

文件基本概念

1. 外部介质,外部介质是针对内存来说的 ,输入输出设备,比如键盘/显示器以及打印机等,将计算机操作外部设备,包括驱动程序,都是以读写文件的模式交换信息的.就和linux一样,一切皆文件. 2. 文件的分类: 按文件的逻辑结构 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 ,没有大小,实时传送的,像正在视频聊天的数据就是 按存储介质: 普通文件:存储介质文件(磁盘,磁带等) 设备文件:非存储介质(键盘,显示器,打印机等) 按数据的组织形式: 文本

C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器,它能够长期保留信息,能读能写,可以刷新重写,方便携带,因而得到广泛使用. 文件(file)是程序设计中一个重要的概念.所谓“文件”,一般指存储在外部介质上数据的集合.一批数据是以文件的形式存放在外部介质(如磁盘.光盘和U盘)上的.操 作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部

Linux文件重点概念

1.FILE结构体? FILE 是 C语言文件结构定义, 打开文件和文件操作要用到这类结构.可以看成变量类型,用于变量声明.这个是一种数据结构类型,用来表示一个文件的相关信息,如果定义了一个文件指针,就用这个指针来指向某个文件,然后就能使用这个指针对文件来进行操作了.      FILE在"stdio.h"中有如下定义:struct _iobuf {    char *_ptr; //文件输入的下一个位置    int _cnt; //当前缓冲区的相对位置    char *_base

诠释Linux中『一切都是文件』概念和相应的文件类型

在 Unix 和它衍生的比如 Linux 系统中,一切都可以看做文件.虽然它仅仅只是一个泛泛的概念,但这是事实.如果有不是文件的,那它一定是正运行的进程. 要理解这点,可以举个例子,您的根目录(/)的空间充斥着不同类型的 Linux 文件.当您创建一个文件或向系统传输一个文件时,它会在物理磁盘上占据的一些空间,而且是一个特定的格式(文件类型). 虽然 Linux 系统中文件和目录没有什么不同,但目录还有一个重要的功能,那就是有结构性的分组存储其它文件,以方便查找访问.所有的硬件组件都表示为文件,

C语言的fopen函数(文件操作/读写)

头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为:     FILE * fopen(const char * path, const char * mode); [参数]path为包含了路径的文件名,mode为文件打开方式. mode有以下几种方式: 打开方式 说明 r 以只读方式打开文件,该文件必须存在. r+ 以读/写方式打开文件,该文件必须存在. rb+ 以读/写方式打开一个二进制文件,只允许读/写数据. rt+ 以读/写