Fat 文件系统(2)

Fat 文件系统(2

 

根目录区在fat32中不存在,它与普通目录一样处理。根目录在fat12/16中有固定的大小,连存放多少个目录项也是固定的。在fat32种根目录和其他的普通目录是一样的,只不过有隐含的名字‘/’,没有日期时间戳。

 

目录其实就是文件,把目录结构的属性位DAR_Attr 设置成ATTR_DIRECTORY,就是目录了。目录是一个32bytes的结构,它的前11bytes是文件的名字。我们暂时不谈长文件名它的格式是8.3格式。偏移11处的一个字节是一个属性bytes,偏移12处的一个byteswindows NT保留的;偏移14处的两个字节是文件创建的时间;偏移16处的两个bytes是文件的创建的日期;偏移18处是文件最后一次存取的时间。偏移20和偏移26处的两个字节总共4个字节确定了文件的开始的第一个簇号。最有4个字节是文件的大小。以上是介绍文件的目录结构。需要注意的是在fat文件系统中,目录的大小被设置成0;它的大小被后面的簇链来恒定。

 

要创建一个文件就要创建一个目录项,把给目录项的属性位设置成ATTR_ARCHIVE。并把它写入到相应的扇区中。

 

我假定在根目录下创建一个文件,在fat32中,并没有单独划分出来根目录区,根目录区是与数据区合在一起的,根目录的位置(簇号)存放在BPB_RootClus中,一般来说,这个簇号是2,但并不是绝对的,如果该簇坏了,就是下一个簇了,我们在根目录中创建文件,我们有此簇号计算出fat表中的所在的位置,由fat表我们可以查看根目录占用空间的情况,如果fat的表项不是0x0fffffff,就说明根目录不止一个簇,那么这个fat表项的内容就是下一个簇的簇号;于是我们又回到了以前有个簇号,再去找到fat的表项直到我们找到fat的表项是0x0fffffff,我们结束查找,我们就要读出所找到簇号扇区。因为一个簇有BPB_SecPerClu个扇区组成,到底要在哪一个扇区中创建文件目录呢?那就要看那个扇区有空闲了,一个目录项是32bytes0-10byte是目录项的名字——Dir_Name,Dir_Name[0]又特殊的意义和用处,如果Dir_Name[0] = 0x00,表示该目录是空闲的目录,Dir_Name[0] = 0x05,表示该目录是一个被删除的目录项,因此我们只要寻找目录项的名字域是0或则是ox05的就可以了。一个扇区是512bytes,可以容纳16个目录项,目录项的名字就是32的倍数处;如果这个根目录的结束簇内的扇区全部被占用,就需要少描fat表,寻找第一个空闲的簇用于存放新的文件目录项,这样就有点麻烦了,你还需要更新根目录的簇链。这样我们就建立了一个文件,不过这个文件目前还是空的,空文件的开始簇号被设置成0。下一步我们就要往文件中写数据了,首先是少描fat表找到一个空闲的簇,计算扇区,写入数据的长度判定是否需要进一步分配簇,写完后要更新文件的目录项中的开始簇。这样就完成了整个写文件的过程在fat32种,另外在fat32在中一个结构专门记录fat表的一个空闲项,也就是第一空闲的簇号,这主要是为了,提高查找速度,因为fat32fat是个很长的表,而在fat12fat16中相对较短,并且有长度限制。

 

fat16中,不同之处是根目录区不是和数据区重合的,它是独立出来有一个固定的大小,一次根目录中一的目录和文件到个数也就有了限制。要经过计算才能得到根目录的第一个扇区。找到了根目的一个扇区,就可以开始查找空闲的目录项了。至于写目录项和文件就大致相同了。如有错误希望指正。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值