Я пытаюсь написать программу на C, которая позволяет мне перемещаться по образу файловой системы FAT32. Однако у меня возникают трудности с пониманием и применением уравнений для сбора правильных данных. Я использую Debian-дистрибутив Linux, поэтому поддерживается прямой порядок байтов. Ниже приведен псевдокод с сайта Microsoft о 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 на основе кластеров, мы были бы очень признательны, мне кажется, что переход по ссылке на секторы более эффективен, хотя распределение кластеров обеспечивает пространственную локальность. Я не совсем понимаю, как выполнить чтение байтов, чтобы найти следующий кластер для файлов/папок.