【文件 part 1 – 文件的概念】

【文件 part 1 – 文件的概念】磁盘文件 我们通常认识的文件 指一组相关数据的有序集合 通常存储在外部介质 如磁盘 上 使用时才调入内存

大家好,欢迎来到IT知识分享网。

一、文件的概念

文件用来存放程序、文档、音频、视频数据、图片等数据的。
文件就是存放在磁盘上的,一些数据的集合。
在windows下可以通过写字板或记事本打开文本文件对文件进行编辑保存。写字板和记事本是微软程序员写的程序,对文件进行打开、显示、读写、关闭。
作为一个程序员,必须掌握编程实现创建、写入、读取文件等操作。
对文件的操作是经常要用到的知识,比如:传送文件等。

1.1 文件的定义

  1. 磁盘文件:(我们通常认识的文件)
    指一组相关数据的有序集合,通常存储在外部介质(如磁盘)上,使用时才调入内存。
  2. 设备文件:
    在操作系统中把每一个与主机相连的输入、输出设备看作是一个文件,把它们的输入、输出等同于对磁盘文件的读和写。
    – 键盘:标准输入文件
    – 屏幕:标准输出文件
    – 其它设备:打印机、触摸屏、摄像头、音箱等

在Linux操作系统中,每一个外部设备都在/dev目录下对应着一个设备文件,咱们在程序中要想操作设备,就必须对与其对应的/dev下的设备文件进行操作。

标准io库函数对磁盘文件的读取特点:
在这里插入图片描述
文件缓冲区是库函数申请的一段内存,由库函数对其进行操作,程序员没有必要知道存放在
哪里,只需要知道对文件操作的时候的一些缓冲特点即可。

行缓冲

标准io库函数,往标准输出(屏幕)输出东西的时候是行缓冲的。
所谓的行缓冲就是缓冲区碰到换行符的时候才刷新缓冲区。
如果不刷新缓冲区,无法对文件执行读写操作。
行缓冲的刷新条件:

#include <stdio.h> int main(int argc, char const *argv[]) { 
    //由于printf函数是一个标准io,所以只有刷新缓冲区才可以将数据输出到终端 //printf("hello world"); //刷新缓冲区方法1:使用\n //printf("hello world\n"); //刷新缓冲区方法2:程序正常结束 //printf("hello world"); //return 0; //刷新缓冲区方法3:使用fflush函数刷新缓冲区 //printf("hello world"); //fflush:刷新函数。可以刷新指定的缓冲区 //stdout:标准输出,就是对终端进行写操作 //fflush(stdout); //刷新缓冲区方法4:当缓冲区满的时候自动刷新 //默认行缓冲的大小为1024个字节 int i; for(i = 1; i < 300; i++) { 
    printf("%03d ", i); } while(1) { 
    } return 0; } 

全缓冲

  1. 缓冲区满了,刷新缓冲区
  2. 人为刷新缓冲区 fflush(文件指针)
  3. 程序正常结束 会刷新缓冲区

无缓冲

在读写文件的时候通过系统调用io (read write),对文件进行读写数据时,是无缓冲的,即写数据会立马进入文件,读数据会立马进入内存。

写文件的流程

设置缓冲区的目的

通过缓冲可以减少进出内核的次数,以提高效率。

1.2 磁盘文件的分类

一个文件通常是磁盘上一段命名的存储区。
计算机的存储在物理上是二进制的,所以物理上所有的磁盘文件本质上都是一样的:以字节为单位进行顺序存储。
从用户或者操作系统使用的角度(逻辑上)把文件分为:
4. 文本文件:基于字符编码的文件
5. 二进制文件:基于值编码的文件

文本文件

基于字符编码,常见编码有ASCII、UNICODE等。一般可以使用文本编辑器直接打开。
例如:
数5678的以ASCII存储形式为:
ASCII码:00 00 00 00
歌词文件(lrc):文本文件

二进制码文件

基于值编码,自己根据具体应用,指定某个值是什么意思。把内存中的数据按其在内存中的存储形式原样输出到磁盘上,一般需要自己判断或使用特定软件分析数据格式。
例如:
数5678的存储形式为:
二进制码:00010110 00
音频文件(mp3):二进制文件
图片文件(bmp)文件,一个像素点由两个字节来描述*&&&&&
*代表红色的值,#代表绿色的值,&代表蓝色的值,二进制文件以位来表示一个意思。

文本文件、二进制文件对比:

  1. 译码:
    文本文件编码基于字符定长,译码容易些;
    二进制文件编码是变长的,译码难一些(不同的二进制文件格式,有不同的译码方式)。
  2. 空间利用率:
    二进制文件用一个比特来代表一个意思(位操作);
    而文本文件任何一个意思至少是一个字符。
    二进制文件,空间利用率高。
  3. 可读性:
    文本文件用通用的记事本工具就几乎可以浏览所有文本文件。
    二进制文件需要一个具体的文件解码器,比如读BMP文件,必须用读图软件。

总结一下:
文件在硬盘上存储的时候,物理上都是用二进制来存储的。
咱们的标准io库函数,对文件操作的时候,不管文件的编码格式(字符编码、或二进制),而是按字节对文件进行读写,所以咱们管文件又叫流式文件,即把文件看成一个字节流。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/143053.html

(0)
上一篇 2025-05-06 13:20
下一篇 2025-05-06 13:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信