文件的概念和文件指针

一、文件的概念

凡是使用过文件的人对文件都不会感到陌生

文件用来存放程序、文档、音频、视频数据、图片等数据的。文件就是存放在磁盘上的,一些数据的集合。

windows 下可以通过写字板或记事本打开文本文件对文件进行编辑保存。写字板和记事本是微软程序员 写的程序,对文件进行打开、显示、读写、关闭。

作为一个程序员,必须掌握编程实现创建、写入、读取文件等操作

对文件的操作是经常要用到的知识,比如:写飞秋软件传送文件 等

1.文件的分类:

磁盘文件:(我们通常认识的文件)
               指一组相关数据的有序集合,通常存储在外部介质(如磁盘)上,使用时才调入内存。

设备文件:
             在操作系统中把每一个与主机相连的输入、输出设备看作是一个文件,把它们的输入、输出等同于 对磁盘文件的读和写。

键盘:标准输入文件              屏幕:标准输出文件
其它设备:打印机、触摸屏、摄像头、音箱等
Linux 操作系统中,每一个外部设备都在/dev 目录下对应着一个设备文件,咱们在程序中要想操作设备,就必须对与其对应的/dev 下的设备文件进行操作。

标准 io 库函数对磁盘文件的读取特点

文件缓冲区是库函数申请的一段内存,由库函数对其进行操作,程序员没有必要知道存放在哪里,只需要 知道对文件操作的时候的一些缓冲特点即可。

VS 中对普通文件的读写是全缓冲的。

全缓冲
标准 io 库函数 ,往普通文件读写数据的,是全缓冲的,刷新缓冲区的情况
1.缓冲区满了,刷新缓冲区
2.调用函数刷新缓冲区 fflush(文件指针)
3.程序结束 会刷新缓冲区

2.磁盘文件的分类:

一个文件通常是磁盘上一段命名的存储区
计算机的存储在物理上是二进制的,所以物理上所有的磁盘文件本质上都是一样的:以字节为单位进行顺序存储

从用户或者操作系统使用的角度(逻辑上)
      把文件分为:
      文本文件:基于字符编码的文件
      二进制文件:基于值编码的文件
文本文件:
基于字符编码,常见编码有 ASCIIUNICODE
一般可以使用文本编辑器直接打开
      例如:5678 的以 ASCII 存储形式为:
ASCII 码:00110101 00110110 00110111 00111000

二进制码文件:
基于值编码,根据具体应用,指定某个值是什么意思
一般需要自己判断或使用特定软件分析数据格式
      例如:数 5678 的存储形式为:
      二进制码:00010110 00101110

音频文件(mp3):二进制文件
图片文件(bmp)文件,一个像素点由两个字节来描述*****######&&&&& 5 6 5

*代表红色的值 R
#代表绿色的值 G
&代表蓝色的值 B

二进制文件以位来表示一个意思。

文本文件、二进制文件对比:
译码:
        文本文件编码基于字符定长,译码容易些;
        二进制文件编码是变长的,译码难一些(不同的二进制文件格式,有不同的译码方式,一般需要特定 软件进行译码)。

空间利用率:
二进制文件用一个比特来代表一个意思(位操作);而文本文件任何一个意思至少是一个字符。

所以二进制文件,空间利用率高。

可读性:
        文本文件用通用的记事本工具就几乎可以浏览所有文本文件
二进制文件需要一个具体的文件解码器,比如读 BMP 文件,必须用读图软件。

总结:
        1、文件在硬盘上存储的时候,物理上都是用二进制来存储的。

        2、咱们的标准 io 库函数,对文件操作的时候,不管文件的编码格式(字符编码、或二进制),而是 按字节对文件进行读写,所以咱们管文件又叫流式文件,即把文件看成一个字节流。

二、文件指针

文件指针在程序中用来标识(代表)一个文件的,在打开文件的时候得到文件指针,文件指针就用来代表咱们打开的文件。

        咱们对文件进行读、写、关闭等操作的时候,对文件指针进行操作即可,即咱们将文件指针,传给读、写、关闭等函数,那些函数就知道要对哪个文件进行操作。

定义文件指针的一般形式为:
        FILE * 指针变量标识符;
        FILE 为大写,需要包含<stdio.h>
        FILE 是系统使用 typedef 定义出来的有关文件信息的一种结构体类型,结构中含有文件名、文件   状态和文件当前位置等信息

        一般情况下,我们操作文件前必须定义一个文件指针标识 我们将要操作的文件
        实际编程中使用库函数操作文件,无需关心 FILE 结构体的细节 ,只需要将文件指针传给 io 库函数,库函数再通过 FILE 结构体里的信息对文件进行操作

FILE stdio.h 文件中的文件类型声明:

在缓冲文件系统中,每个被使用的文件都要在内存中开辟一块 FILE 类型的区域,存放与操作文件相关的信息

对文件操作的步骤:
1、对文件进行读写等操作之前要打开文件得到文件指针
2、可以通过文件指针对文件进行读写等操作
3、读写等操作完毕后,要关闭文件,关闭文件后,就不能再通过此文件指针操作文件了

补充:
c 语言中有三个特殊的文件指针无需定义,在程序中可以直接使用
        stdin: 标准输入   默认为当前终端(键盘)
        我们使用的 scanfgetchar 函数默认从此终端获得数据
        stdout:标准输出   默认为当前终端(屏幕)
        我们使用的 printfputs 函数默认输出信息到此终端
        stderr:标准错误输出设备文件   默认为当前终端(屏幕)
        当我们程序出错使用:perror 函数时信息打印在此终端
总结:
文件指针是个指针,它是个 FILE 类型结构体指针,用文件指针来标识一个文件。

  • 26
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值