我正在編寫一個程序,我需要訪問引導扇區中關於我已安裝的FAT32文件系統的一些信息。正在讀取FAT32文件系統的引導扇區
這是我所做的,完全評論。
int main (void) {
unsigned short *i; //2 byte unsigned integer pointer
char tmp[1024]; //buffer
int fd; //file descriptor from opening device
fd = open("/dev/sdf", O_RDONLY); //open the device file
lseek(fd, 14, SEEK_SET); //set offset to 14 (0x0E), i.e. storing "no. of reserved sectors" of the FAT32 system
read(fd, tmp, 2); //read off 2 bytes, "no. of reserved sectors" is represented by 2 bytes
i = &tmp; //point j at those 2 bytes
printf("*j: %d\n", *j); //print *j out
close(fd); //close device
return 0;
}
* i的輸出是38,這是無稽之談。我用mkfs.vfat格式化文件系統。我設置爲32
我曾嘗試 「無保留扇區的。」:
I =(無符號短*)& TMP,做一個鑄件,這消除當我編譯警告,但沒有幫助
讀取(fd,tmp,512),將整個引導扇區(512字節)加載到tmp中,然後從緩衝區讀取,但沒有幫助,結果仍然是38。
擺弄偏移量,即改變14到13或15,以防我索引錯誤。它打印出13分別爲9744和512分別爲15,所以不起作用。
我不知道我是否正確地做了這件事。有人可以請指點我正確的方向嗎?
在此先感謝,
Felastine。
你打開'/ dev/sdf',這是整個磁盤。您是否嘗試僅打開您格式化爲FAT32的分區,例如'的/ dev/sdf1'? – 2011-12-21 10:29:18
是什麼讓你認爲38錯了?這對我來說聽起來像是一個合理的數字。有沒有可能mkfs.vfat沒有按照你的要求去做? – Stewart 2011-12-21 10:29:43
@FrédéricHamidi 實際上,整個磁盤的「/ dev/sdf」是FAT32。 – Felastine 2011-12-21 10:34:57