正在读取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。

+0

你打开'/ dev/sdf',这是整个磁盘。您是否尝试仅打开您格式化为FAT32的分区,例如'的/ dev/sdf1'? – 2011-12-21 10:29:18

+0

是什么让你认为38错了?这对我来说听起来像是一个合理的数字。有没有可能mkfs.vfat没有按照你的要求去做? – Stewart 2011-12-21 10:29:43

+1

@FrédéricHamidi 实际上,整个磁盘的“/ dev/sdf”是FAT32。 – Felastine 2011-12-21 10:34:57

尝试运行:

$ 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 

tmpchar[]&tmp东西的顺序char**。 再次想一想,您不希望&在这里。