数码相框毕业论文1(9)
重庆邮电大学本科毕业设计(论文)
空间,而是整个一簇。而对于大文件,要占用多个簇,这些簇并一定完整地存放在一个连续的区域,而往往会分成若干段,像链子一样存放,这种存储方式称为文件的链式存储。为了实现文件的链式存储,文件系统必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号,对文件的最后一簇,则要指名本簇无后继簇。这些都是由FAT表来保存的。
FAT表实际上是一个数据表,以2个字节为单位,我们将这个单位称为FAT记录项,一个记录项对应数据区的一个簇,用以记录簇的有关信息:诸如是否空,是否是坏簇,是否已经是某个文件的尾簇等。簇的使用情况不同,与之对应的记录项的取值就不同,见表4.2。
表4.2 FAT16记录项的取值含义 FAT1记录项的取值 0000 0002~FFEF FFF0~FFF6 FFF7 FFF8~FFFF 对应簇的使用情况 未分配的簇 已分配的簇,表项中存放的是 文件下一簇的簇号 系统保留 坏簇 文件结束簇 图4.4是一幅用winhex查看的实际的FATl6文件分配表。
图4.4 FAT16文件分配表
通常情况下前两个记录项(前4个字节)用作介质描述,从第2个记录项(从0计起)开始记录除根目录以外的其他文件及文件夹的簇链情况。相对偏移为0x4~0x5的是第2个记录项,它对应数据区的第二簇,后面的依次类推。第2个记录项取值为FFFF,表示存储在第2簇上的文件(目录)是个小文件,只占用1个簇便结束了。
第3个记录项取值为0x0004,表示第3簇是一个文件的首簇,接下来的数据存放在第4簇,同理,再接下来是第5簇、第6簇,第6个记录项取值为FFFF,表示这是文件的最后一簇。
综上,FAT表记录了磁盘数据文件的存储链表,它对于数据的读取而言是极其重要的。微软为其开发的FAT文件系统中的FAT表创建了一份备份,即
36
重庆邮电大学本科毕业设计(论文)
FAT表2。FAT表2与FAT表1的内容通常是即时同步的,也就是说如果通过正常的系统读写对FAT表1做了更改,那么FAT表2也同样被更新。这样是为了安全起见,当一个FAT表因为一些原因而遭到破坏的时候,可以从另一个FAT表进行恢复。
(3)根目录区及目录项
根目录区,由若干“目录登记项”简称“目录项”组成。根目录下的所有文件及子目录都有一个与之对应的目录项。该目录项记录着每个文件、目录的起始簇号以及文件的大小和创建时间等属性。定位文件位置时,根据根目录中文件的起始簇号,结合FAT表就可以知道文件在磁盘中的具体位置和大小了。每一个目录项由32个字节组成,其定义如表4.3。
表4.3 FAT16目录项32个字节的定义
说明:
对于短文件名,系统将文件名分成两部分进行存储,即主文件名+扩展名。0x0偏移处的取值若为0x00H,表明目录项为空;若为0xE5H,表明目录项曾被使用,但对应的文件或文件夹己被删除。
0xB的属性字段:可以看作系统将0xB的一个字节分成8位,用其中的一位代表某种属性的有或无。这样,一个字节中的8位每位取不同的值就能反映各个属性的不同取值了。如00000101就表示这是个文件,属性是只读、系统。
0xlA~0xlB存放文件的首簇号,根据首簇号在FAT表中找到入口,然后
37
重庆邮电大学本科毕业设计(论文)
再跟踪簇链直至簇尾,同时用0xlC~0xlF处字节判定有效性。就可以完全无误的读取文件了。
FAT文件系统的一个重要思想是把目录(文件夹)当作一个特殊的文件来处理,即普通子目录的寻址过程也是通过其父目录中的目录项来指定的,与数据文件(指非目录文件)不同的是目录项偏移0xB的第4位置1,而数据文件为0。
普通子目录的组织形式与根目录区相同,只是有两个特殊的目录项位于最前面,其文件名分别“.’’和“..”,起始地址分别指向当前目录和上级目录。
(4)数据区
FATl6文件系统从根目录之后开始以簇为单位进行数据的存储,所有子目录及文件都存储在数据区中。对于第一个簇,系统并不编号为第0簇或第1簇,而是编号为第2簇,也就是说数据区顺序上的第1簇其编号为2,与FAT记录项对应。
3、FATl6文件系统的读取过程
读取根目录下文件的流程图如图4.5所示,可分为以下几个步骤:
开始查找根目录文件存在Y文件的起始簇号N出错查找FAT表并按簇序找到所有簇读取簇文件读取完成
图4.5 读取文件流程图
38
重庆邮电大学本科毕业设计(论文)
(1)读取BPB参数,为后面的工作做准备。(通常将DBR所在的扇区称为逻辑0扇区,后面提到的扇区号,都是相对于逻辑0扇区的偏移量。逻辑扇区与物理扇区之间的转换关系可以利用winhex查看,本设计中选用的SD卡,其物理扇区号=逻辑扇区号+249。)
程序中定义描述DBR的结构体为: typedef struct boot_sector{
_u8 BS_jmpBoot[3]; //跳转指令
char BS_OEMName[8]; //厂商标志和os版本号 _u8 BPB_BytePerSec[2]; //每扇区字节数 _u8 BPB_SecPerClus; //每簇扇区数 _u16 BPB_RsvdSecCnt; //保留扇区数 _u8 BPB_NumFATS; //FAT表的个数 _u8 BPB_RootEntCnt[2]; //根目录中的目录项数 _u8 BPB_TotSecl6[2]; //总扇区数
_u8 BPB_Media; //有关存储介质的信息 _u16 BPB_FATSzl6; //FAT表所占的扇区数 _u16 BPB_SecPerTrk; //每磁道扇区数 _u16 BPB_NumHeads; //磁头数
_u32 BPB_HiddSee; //该分区上引导扇区之前的扇区数 _u32 BPB_TotSec32; //如果TotSecl6为零,此域表示总扇区数 _u8 BS_drvNum; //物理驱动器号 _u8 BS_Reservedl; //保留
_u8 BS_BootSig; //扩展引导标记 _u8 BS_VolID[4]; //卷标序列号 char BS_Volab[11]; //磁盘卷标 char BS_FilSysType[9]; //文件系统类型 }boot_sector;
(2)根据要读取文件的文件名查找根目录,得到要读取文件的起始簇号等信息,如图4.6所示。
39
重庆邮电大学本科毕业设计(论文)
开始将根目录数据块读入缓冲区顺序查找目录项目录项正常使用?Y读取文件名NN文件名是否匹配?Y查找成功
图4.6 查找根目录下文件流程图
在查找根目录之前,需要计算根目录的起始扇区。根据DBR中的参数信息,根目录的起始扇区= BPB_RsvdSecCnt+FATSzl6×NumFATS。
程序中定义描述目录项的结构体为: typedef struct direntry{ char name[8]; //文件名 char ext[3]; //扩展名 _u8 attr; //属性位 _u8 lcase[10]; //保留
_u16 time; //最近修改时间 _u16 date; //最近修改同期 _u16 start; //文件的首簇号 _u32 size; //文件大小 }dir_entry;
(3)根据起始簇号,查找FAT表,得到文件存储的簇链情况。 (4)根据簇号链接情况,依次读出数据。对于每一个簇,根据簇号先计算出簇的首地址,然后按顺序读取BPB_SecPerClus个扇区的数据。给一个合法的簇号N,该簇的第一个扇区号= (N-2)×BPB_SecPerClus+数据区的起始扇区;数据区的起始扇区=根目录的起始扇区+根目录所占的扇区;根目录所占
40
…… 此处隐藏:1658字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




