Работаю с FAT, на данном этапе хочу просто считать BIOS PB структуру, и смотреть различные параметры ФС.
#include <stdio.h>
struct BIOSParameterBlock{
char BS_jmpBoot[3];
char BS_OEMName[8];
unsigned short BPB_BytsPerSec;
unsigned char BPB_SecPerClus;
unsigned short BPB_RsvdSecCnt;
};
int main(int argc,char** argv){
BIOSParameterBlock bios;
FILE* device = fopen(argv[1],"rb");
if(device == NULL){
printf("Invalid device or image\n");
return 1;
}
fread(&bios,1,20,device);
printf("Device works well.\nOEM name:");
for(int i=0;i<8;++i) printf("%c",bios.BS_OEMName[i]);
printf("\nByts per sfector:%d\n",bios.BPB_BytsPerSec); //Пишет 16386, а надо 512
fclose(device);
return 0;
}
В спецификации указано, что BPB_BytsPerSec занимает 2 байта с 11 позиции. Если считывать это значение отдельно, а не структурой, то все работает хорошо.