プログラムを作成していて、マウントした 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、キャストを行います。これにより、コンパイル時に警告が削除されますが、役に立ちません
read(fd, tmp, 512)、ブート セクタ全体 (512 バイト) を tmp にロードし、バッファから読み取りますが、役に立たず、結果は 38 のままです。
インデックスを間違えた場合に備えて、オフセットを調整します。つまり、14 を 13 または 15 に変更します。13 の場合は 9744、15 の場合は 512 とそれぞれ出力されるため、動作しません。
正しい方法で行っているかどうかはわかりません。誰かが私を正しい方向に向けることができますか?
前もって感謝します、
フェラスティン。