正在读取FAT32文件系统的引导扇区
问题描述:
我正在编写一个程序,我需要访问引导扇区中关于我已安装的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。
答
尝试运行:
$ dd if=/dev/sdf of=/tmp/x.bin bs=512 count=1
然后:
$ hd /tmp/x.bin
或者
$ od -tx2 /tmp/x.bin
和邮政业第一线。
有可能是你的fattools增加了6个额外的保留扇区。然后他们在显示数据之前减去它们。
答
unsigned short *i; //2 byte unsigned integer pointer
char tmp[1024];
[...]
i = &tmp; //point j at those 2 bytes
tmp
是char[]
,&tmp
东西的顺序char**
。 再次想一想,您不希望&
在这里。
你打开'/ 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