我正在编写程序,我需要在引导扇区中访问有关我已安装的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 =(unsigned short *)& tmp,做一个转换,这会在我编译时删除警告,但没有帮助
读取(fd,tmp,512),将整个引导扇区(512字节)加载到tmp中,然后从缓冲区读取,但没有帮助,结果仍然是38。
摆弄偏移量,即更改14到13或15,以防我的索引错误。它分别为13和512打印出9744,因此不起作用。
我不确定我是否正确地做到了这一点。有人可以指出我正确的方向吗?
提前致谢,
Felastine。
答案 0 :(得分:0)
尝试跑步:
$ dd if=/dev/sdf of=/tmp/x.bin bs=512 count=1
然后:
$ hd /tmp/x.bin
或者
$ od -tx2 /tmp/x.bin
发布第一行。
您的fattools可能会增加6个额外的保留扇区。然后他们在显示数据之前将它们减去。
答案 1 :(得分:-1)
unsigned short *i; //2 byte unsigned integer pointer
char tmp[1024];
[...]
i = &tmp; //point j at those 2 bytes
tmp
是char[]
,&tmp
是订单char**
。
再想一想,你不想在这里&
。