读取FAT32文件系统的引导扇区

时间:2011-12-21 10:26:32

标签: linux boot fat32 sector

我正在编写程序,我需要在引导扇区中访问有关我已安装的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。

2 个答案:

答案 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

tmpchar[]&tmp是订单char**。 再想一想,你不想在这里&