如何从文件系统中读取文件内容

【0】写在前面

0.0) text description from orange’s implemention of a os ,文末总结系个人臆测出的干货


【1】intro to FAT12(file allocation table 12)文件系统格式(from Baidu Baike)

  • (1)FAT12定义: FAT12是DOS时代就开始使用的文件系统(File System),直到2009年仍然在软盘上使用。
  • (2)FAT12的主磁盘结构:
    • 2.1)引导扇区(Boot Sector):位于第一个扇区,在软盘上就是0柱面(磁道)0磁头1扇区。
    • 2.2)文件分配表(FAT):紧接着引导扇区的是两个完全相同的FAT表,每个FAT表占用9个(FAT2是FAT1 的 copy)
    • 2.3)根目录区: FAT表之后是根目录区,根目录区长度不固定
    • 2.4)数据区:根目录后面就是数据区
      这里写图片描述

【2.1】FAT12的引导扇区格式:

名称  开始字节    长度  内容  参考值
BS_jmpBOOT  0   3   一个短跳转指令 jmp Label_07c00H
nop
BS_OEMName  3   8   厂商名 'QingFeng'
BPB_BytesPerSec 11  2   每扇区字节数(Bytes/Sector)    0x200
BPB_SecPerClus  13  1   每簇扇区数(Sector/Cluster)   0x1
BPB_ResvdSecCnt 14  2   Boot记录占用多少扇区    ox1
BPB_NumFATs 16  1   共有多少FAT表    0x2
BPB_RootEntCnt  17  2   根目录区文件最大数   0xE0
BPB_TotSec16    19  2   扇区总数    0xB40[2*80*18]
BPB_Media   21  1   介质描述符   0xF0
BPB_FATSz16 22  2   每个FAT表所占扇区数 0x9
BPB_SecPerTrk   24  2   每磁道扇区数(Sector/track)    0x12
BPB_NumHeads    26  2   磁头数(面数) 0x2
BPB_HiddSec 28  4   隐藏扇区数   0
BPB_TotSec32    32  4   如果BPB_TotSec16=0,则由这里给出扇区数  0
BS_DrvNum   36  1   INT 13H的驱动器号    0
BS_Reserved1    37  1   保留,未使用  0
BS_BootSig  38  1   扩展引导标记(29h) 0x29
BS_VolID    39  4   卷序列号    0
BS_VolLab   43  11  卷标  'QingFeng'
BS_FileSysType  54  8   文件系统类型  'FAT12'
引导代码及其他内容   62  448 引导代码及其他数据   引导代码(剩余空间用0填充)
结束标志0xAA55  510 2   第510字节为0x55,第511字节为0xAA 0xAA55

【2.2】文件分配表-FAT

  • a)FAT的作用:当文件size 大于 512B,则FAT是找出该文件所占用的簇(簇:一个或多个扇区,引导扇区的BPB_SecPerClus记录该数字)
  • b)FAT项:每个项占用12 位,代表一个簇,第0和1个簇不使用,从第2个FAT项 开始表示数据区的每一个簇,即是第2个FAT项表示数据区第一个簇。数据区的第一个簇号是2,和这里是呼应的 。(注意: FAT项值代表的是文件的下一个簇号)
    这里写图片描述
  • 看个荔枝(只看16个字节):(干货)

    如FAT所在扇区(一个扇区512字节)存储值为:F0 FF FF FF 8F 00 FF FF FF FF FF FF 09 A0 00 FF  ,  0F  00 00 ;
    则簇号分别为:0-FF0 1-FFF 2-FFF 3-008 4-FFF 5-FFF 6-FFF 7-FFF 8-009 9-00A A-FFF
    

    如果根目录去中有条目记载某文件A 的 DIR_FstClus=3的话,则对应第3个FAT项,结合上一行,我们知道FAT3==008,所以下一个簇号是8-009 , 以此类推9-00A、 A-FFF。FFF就表示这个簇是最后一个簇了。

【2.3】根目录区-root dir sector

  • a)根目录区中的每一个条目占用32字节,每个条目格式如下:
    这里写图片描述
  • b)根目录区的大小依赖于 BPB_RootEntCnt(引导扇区中的BPB_RootEntCnt,根目录区文件最大数==根目录条目数),所以长度不固定;

如何计算根目录区的扇区数量?
这里写图片描述
显然,BPB_RootEntCnt 和 BPB_BytePerSec 都是由软盘(文件系统FAT12所在的分区)的引导扇区提供的;
所以,我们可以算出该软盘的根目录扇区数量。

【2.4】数据区

  • a)数据区的第一个簇的簇号是2,而不是0 or 1;
    这里写图片描述

【3】下面,我们讲一下,如何从文件系统中读取一个文件的内容(读取某文件的步骤)(纯属个人臆测,干货):

  • a)应用程序给出文件名;
  • b)通过该分区(文件系统)的引导扇区算出 根目录目录 所占扇区大小 和 数据区的起始扇区;
  • c)依据app 给出的文件名 和 根目录项的DIR_Name 定位该文件名对应的根目录项(根目录条目);
  • d)该条目记录了 对应文件的起始簇号,并将 该簇号 送到 FAT1 以找出该文件的占用的所有簇号;(FAT2 是 FAT1 的copy)
  • e)拿到该文件的所有簇号后,依据步骤a)算出的数据区起始扇区,从数据区中 取出 这些簇号里的内容,至此,取出该文件的内容;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java微服务,微在哪_Java:ChronicleMap第3部分,快速微服务

java微服务,微在哪标准Java Maps需要在启动时进行初始化。 了解如何利用可从文件初始化的ChronicleMaps并显着减少微服务启动时间,以及如何在JVM之间共享Maps。 内置的Map实现(例如HashMap和ConcurrentHashMap速度很快,但是必须先使用映射进…

excel离散度图表怎么算_Excel数据分析——离散值排除-excel直方图

今天举例的数据继续沿用昨天做出来的结果,至于这组数据还要接着用多久~~可能要混到我讲不下去为止吧~~~我们通过两个不同的拟合公式得到了两组不同的残差值,数据情况如下:有没有觉得看上面那张散点图有点糊啊?没错,问题…

drools dmn_Drools DMN最新开源引擎性能改进

drools dmn我们一直在寻求改善Drools DMN开源引擎的性能。 我们最近审查了DMN用例,其中输入数据节点的实际输入总体有所不同。 这突出显示了引擎的次佳性能,我们在最新版本中对此进行了改进。 我想分享我们的发现! 基准制定 当我们开始为此用…

制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容

【-1】Before for specific info , please visit http://wiki.osdev.org/Loopback_Device 【0】我们先上干货,看到效果后,我们再说明每个步骤的缘由; 【1】进入挂载目录,添加相关文件(依个人意愿) Attenti…

如何取消高亮显示重复项_如何将重复数据突出显示?

将表格中一列数据中重复的,使用特殊颜色突出显示或者使用一些符号标记出来。例如:一个供应商,可以邀请别的供应商加入成为联合体,报表要显示所有供应商,然后供应商最后一列显示所有联合体,当联合体供应商跟…

Maven的maven-source-plugin插件详解

maven-source-plugin 这个插件专门负责将项目源文件打成包的&#xff0c;该插件在 pom.xml 中的配置如下&#xff1a; <build><plugins><plugin><artifactId>maven-source-plugin</artifactId><version>3.0.1</version><configu…

Maven Java Web Project打包详解/如何打包

文章目录打包部署构件&#xff08;Artifacts&#xff09;打源码包方式一&#xff1a; 命令行方式方式二&#xff1a;使用 IDE将源码包发布到本地 Maven 仓库中涉及到案例项目的结构&#xff1a; 打包部署构件&#xff08;Artifacts&#xff09; war 格式的部署构件可以直接放…

四位共阳极数码管显示函数_数码管模块.doc

数码管模块数码管1、概 述数码管模块采用四位共阳极数码管&#xff0c;用于显示数字和少数特殊字符。可以在机器人项目中使用该模块&#xff0c;用于显示速度、时间、分数、温度、距离等传感器的值。同时&#xff0c;Makeblock提供易于编程的Arduino库&#xff0c;使用户能够方…

java中的可检查和不检查_检查Java测试中发生了什么

java中的可检查和不检查有人想到了在Java单元测试中使用try和catch块的想法&#xff1a; Test public void test() { try { callSomeCode(); } catch (Exception e) { assertEquals( "foo" , e.getMessage()); } } 上面的内容很诱人&#xff0c;但不起作用 。 如果…

FAT12中,如何定位大于一个扇区(512B)的文件内容

【0】README 0.1&#xff09;本文旨在于 演示在FAT12中&#xff0c; 如何取定位大于 512B 的文件内容&#xff0c;和查看它&#xff1b;0.2&#xff09;如何制作FAT12文件系统&#xff0c;以及如何向文件中添加temp.txt文件&#xff0c;参见&#xff1a; { http://blog.csdn.n…

通过Struts2的拦截器实现文件上传/上传文件功能

struts.xml配置内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd&qu…

java获取ram_Java:ChronicleMap第2部分,超级RAM映射

java获取ram诸如无处不在的HashMap类的标准Java Map最终受到可用RAM的限制。 阅读本文并了解如何创建几乎无限大小甚至超过目标计算机RAM大小的Java Map。 内置的Map实现&#xff0c;例如HashMap和ConcurrentHashMap &#xff0c;只要它们相对较小&#xff0c;就可以正常工作。…

lifi与wifi的论文_Wifi_(毕业论文).doc

Wifi_(毕业论文)绪论2第一章 Wi-Fi技术概述31.1 无线局域网络31.1.1 IEEE 802.11系列标准31.1.2 无线局域网络概述31.2 Wi-Fi概念的引入41.2.1 Wi-Fi技术41.2.2 怎样使用Wi-Fi41.2.3 谁可以使用Wi-Fi5第二章 Wi-Fi技术的分析62.1 Wi-Fi与其他技术的对比分析6参 考 文 献8绪论Wi…

os引导程序boot从扇区拷贝os加载程序loader文件到内存(boot copy kernel to mem in the same method)

【0】README 0.1&#xff09; 本代码旨在演示 在boot 代码中&#xff0c;如何 通过 loader文件所在根目录条目 找出该文件的 在 软盘所有全局扇区号&#xff08;簇号&#xff09;&#xff0c;并执行内存中的 loader 代码&#xff1b;0.2&#xff09; 此代码非常重要&#xff0…

Struts2的资源文件和国际化(i18n)

文章目录资源文件的命名资源文件基名的指定struts.xml 文件指定资源文件的基名struts.properties 文件指定资源文件的基名通过标签 i18n 指定资源文件的基名资源文件的位置包级资源文件类级资源文件全局级资源文件默认资源文件资源文件的加载顺序Action 中加载资源文件在 JSP 中…

java设计模式之装饰模式_Java中的装饰器设计模式

java设计模式之装饰模式装饰器设计模式允许在运行时将附加职责或行为动态附加到对象。 它是一种结构模式&#xff0c;利用聚合来组合这些行为。 在本教程中&#xff0c;我们将学习实现装饰器模式。 UML图&#xff1a; 让我们从装饰器模式的UML表示开始&#xff1a; Concrete…

qml 自定义消息框_Qt qml 自定义消息提示框

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/a844651990/article/details/78376767Qt qml 自定义消息提示框QtQuick有提供比较传统的信息提示框Mes…

计算机器内存数量+引入和显示ARDS成员

【1】README 1.1&#xff09; 本代码在于读取内存中多个 内存段的地址范围描述符结构体&#xff08;ARDS&#xff09;&#xff0c;有多少个内存段可以用&#xff1b;1.2&#xff09; source code and images in the blog from orange’s implemention of a os 1.3&#xff09;…

Maven Java 项目中,pom.xml 文件的依赖标签作用解读(<dependency/>)

该标签会让 Maven 自动到本地仓库或远程仓库去查找构件&#xff0c;找到后会自动创建项目级别的资源库&#xff0c;然后会将资源库同步到依赖此构件的模块的 classpath 中&#xff0c;也就是模块的依赖库中&#xff0c;如下图所示&#xff1a; classpath 就是类路径&#xff0…

自我审视记录本_春天重新审视战略模式

自我审视记录本这篇博客文章希望展示另一种方法&#xff0c;该方法如何通过依赖注入实现策略模式。 作为DI框架&#xff0c;我选择Spring框架 首先&#xff0c;让我们看一下如何以经典方式实施策略模式。 作为起点&#xff0c;我们有一个HeroController &#xff0c;应该在He…