对于一个较长的文件,DOS把两个或者更多的簇分配给它,而该文件占用的簇号链是映像在FAT中的。如果你想看一下实际的FAT,由于每一个FAT项,特别是12位长(1.5字节)的表项,它们被拼装在一起,每两项占用三个字节。因此想要把FAT中的变型映像拼装还原成簇号也不是件容易的事。下面介绍的编程规则,说明从已知簇号,确定下一个后续簇的步骤,有以下两种情形。
1.情形1
FAT登记项为12位时寻找簇链的计算步骤。
(1)将已知的十进制簇号乘以1.5。
(2)乘积的整数部分是到FAT的相对位移,在该位置存放着文件下一簇的簇号。
(3)从该位移处取出一个字(字的高低顺序是低位在先,高位在后)。
(4)若已知簇号为偶数,则保留该字低12位,否则保留高12位。
(5)若保留的12位为FF8-FFF,则表明已知簇是文件的末簇;若既非FF8-FFF,又非FF0-FF7,则此12位即为该文件的下一个簇。
【例2.1】 我们用实际例子来说明这个规则的应用。先找文件的起始簇号,再找FAT的十六进制文本。从FAT的十六进制文本,利用上述规则则得到文件的簇链。
(1)查找文件的起始簇号。假定A盘(1.44M)含有DEBUG.COM文件,把含有文件(例如经属性修改后能显示的IO.SYS文件)的盘插入A驱动器作如下操作:
从显示的内容看出,IO.SYS的起始簇号为02(在11A处),MSDOS.SYS的起始簇号为 52H(在13A处);COMMAND.COM的起始簇号为9DH(在15A处)。
(2)获得FAT的十六进制文本。
(3)使用FAT的实际举例说明由查目录得IO.SYS的首簇号为2,那么:
1)2*1.5=3.0。
2)乘积3.0取整得3,在0003存放下一簇的簇号。
3)在FAT的第三字节,取一个字:4003。
4)本簇号为2(偶数),保留低12位:003。(www.xing528.com)
5)保留的12位不是FFF,则它是该文件下一簇号。
现在以所得簇号003作为起始簇号,按同样步骤获得下一个簇号为4的计算为:
1)3*1.5=4.5。
2)4.5取整得4。
3)从第四个字节取一个字:0040。
4)簇号3为奇数,保留高12位:004。
该文件下一个簇号为004。
照此类推,便得到IO.SYS的簇链。
2.情形2
FAT登记项为16位时寻找簇链的计算步骤如下所示。
(1)由文件的目录项找到该文件的起始簇号作为当前已知簇号。
(2)将已知簇号乘以2。
(3)将乘积的结果作为是到FAT的相对偏移(从0算起),在该位置放着下一簇的簇号。
(4)从该位移处取出一个字(注意字的高低字节顺序)。
(5)若所取得的字为FFF8~FFFFH,则该字为文件的末簇;否则,该结果为文件的下一簇号。
将步骤(5)所得下一簇簇号作为当前已知簇号,重复步骤(2)~(5)再寻找下一簇,如此继续,直到文件的末簇。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。