我正在尝试用 C 语言编写一个程序,该程序允许我在 FAT32 文件系统映像中移动。但是,我很难理解和应用方程式来收集正确的数据。我正在使用 linux 的 debian 发行版,因此保留了 little-endian 形式。下面是来自微软网站的关于 FAT32 的伪代码,计算下一个集群以访问目录或文件:
ThisFATSecNum = BPB_ResvdSecCnt + (FATOffset / BPB_BytsPerSec);
ThisFATEntOffset = REM(FATOffset / BPB_BytsPerSec);
FAT32ClusEntryVal = FAT32ClusEntryVal & 0x0FFFFFFF;
*((DWORD *) &SecBuff[ThisFATEntOffset]) =
(*((DWORD *) &SecBuff[ThisFATEntOffset])) & 0xF0000000;
*((DWORD *) &SecBuff[ThisFATEntOffset]) =
(*((DWORD *) &SecBuff[ThisFATEntOffset])) | FAT32ClusEntryVal;
我不完全理解 SecBuff 字符数组在做什么或正在访问什么。DWORD 应该是一个无符号整数,我也不确定我是否理解后续的强制转换。任何灯棚都非常感谢。
如果有人还可以解释我们应该如何基于集群移动通过 FAT32 文件系统,那将不胜感激,在我看来,即使集群分配确保了空间局部性,通过引用扇区更有效。我不完全了解如何进行字节读取以找到文件/文件夹的下一个集群。