gpt4 book ai didi

c - 如何计算 FAT 文件系统中的 FAT 大小

转载 作者:行者123 更新时间:2023-11-30 18:51:18 29 4
gpt4 key购买 nike

我正在用 C 实现 FAT 文件系统。我遵循 microsoft 发布的规范 ( http://read.pudn.com/downloads77/ebook/294884/FAT32%20Spec%20%28SDA%20Contribution%29.pdf )

但我不明白如何计算引导扇区的 FAT 大小字段。在规范文档第 14 页出现以下代码。

RootDirSectors = ((BPB_RootEntCnt * 32) + (BPB_BytsPerSec – 1)) / BPB_BytsPerSec; 
TmpVal1 = DskSize – (BPB_ResvdSecCnt + RootDirSectors);
TmpVal2 = (256 * BPB_SecPerClus) + BPB_NumFATs;
If(FATType == FAT32)
TmpVal2 = TmpVal2 / 2;
FATSz = (TMPVal1 + (TmpVal2 – 1)) / TmpVal2;
If(FATType == FAT32) {
BPB_FATSz16 = 0;
BPB_FATSz32 = FATSz;
} else {
BPB_FATSz16 = LOWORD(FATSz);
/* there is no BPB_FATSz32 in a FAT16 BPB */
}

从这段代码我不明白

  1. TmpVal2 是什么?
  2. 为什么使用数字 256?
  3. 如果是 FAT32 为什么要除以 2?

最佳答案

我不确定为什么选择常数 256,但这里有一些关于您其他问题的想法。

源代码段下方有一条注释,指出数学是近似值。

NOTE: The above math does not work perfectly. It will occasionally set a FATSz that is up to 2 sectors too large for FAT16, and occasionally up to 8 sectors too large for FAT32. It will never compute a FATSz value that is too small, however. Because it is OK to have a FATSz that is too large, at the expense of wasting a few sectors, the fact that this computation is surprisingly simple more than makes up for it being off in a safe way in some cases.

我阅读代码的方式是,计算是针对FAT16大小的,然后如果目标实际上是FAT32,则对计算进行调整。

变量 TmpVal2 的值看起来是一个单位大小,因为为 TmpVal1 的值计算的空间量然后除以单位大小值TmpVal2 以确定磁盘空间的单位数。然而,FAT32 的单位大小比 FAT16 小,因此需要进行调整。

FAT16 似乎使用了特定大小的文件分配表,并且随着磁盘技术的改进,卷可用的硬盘空间增加,簇大小基于卷大小。因此,对于较小的卷大小,簇大小(分配单元中的磁盘扇区数)小于大卷大小的簇大小。请参阅FAT16 vs. FAT32 in Microsoft TechNet以及您引用的文档第 13 页源代码中的表格。

对于 FAT32,使用 4K 的标准簇大小,文件分配表存储从固定大小更改为可变大小,并且不再位于磁盘上的固定位置。

本文,File systems (FAT, FAT8, FAT16, FAT32, and NTFS) explained ,详细介绍了这些不同文件系统版本之间的差异。

维基百科文章,File Allocation Table ,有相当多的技术信息以及其他文章的链接。

您还可能会找到以下感兴趣的 stackoverflow 文章。

Converting the cluster number stored in FAT table (of FAT12 filesystem) for reading from a floppy disk

Why did Windows use the FAT structure instead of a conventional linked list with a next pointer for each data block of a file?

关于c - 如何计算 FAT 文件系统中的 FAT 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37226654/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com