#define DOS_MIN_CLUSTER (2)
secNo<->ClusterNo.
typedef long long sector_t
sector_t clus2sec(clusNo)
{
sector_t secNo;
secNo=(clusNo-DOS_MIN_CLUSTER)*secPerCluster+dataStartSec;
return secNo;
}
int sec2clus(sector_t secNo)
{
int clusNo;
clusNo=(secNo-dataStartSec)/secPerCluster+DOS_MIN_CLUSTER;
return clusNo;
}
所以cluster最小从2开始
dataStartSec=nReservedSecs+secPerFat*nFats
pFatDesc->fatStartSec = pVolDesc->nReservedSecs
一些数据在BPB中的偏移:
bootSecNum = DOS_BOOT_SEC_NUM对应物理secNo是nHiddenSecs
nHiddenSecs <->DOS_BOOT_NHIDDEN_SECS (0x1C,4)
rootStartClust <->DOS32_BOOT_ROOT_START_CLUST (0x2c,4)
nReservedSecs <->DOS_BOOT_NRESRVD_SECS (0x0E,2)
secPerClust <->DOS_BOOT_SEC_PER_CLUST (0x0D,1)
secPerFat <->DOS32_BOOT_SEC_PER_FAT (0x24,4)
bytesPerSec <->DOS_BOOT_BYTES_PER_SEC (0x0b,2)
totalSec <->DOS_BOOT_LONG_NSECTORS (0x20,4)
nFats <->DOS_BOOT_NFATS (0x10,1)
FAT32 中sector number和cluster number的转换关系
猜你喜欢
转载自blog.csdn.net/ambercctv/article/details/80434405
今日推荐
周排行