看板 LinuxDev 關於我們 聯絡資訊
※ 引述《phterry (小風)》之銘言: : ※ 引述《Xphenomenon (啦 )》之銘言: : : 請問一下,在 Linux 下我去 open() 某一個 device 之後, : : 已知這個 device 的某一個 partition 的系統的 file, : : 我要如何去讀取他的 partition table 呢? : : 是不是要下 ioctl() ? 麻煩各位大大 :> : 磁碟的最前面 512 bytes 叫做 Master Boot Record (簡稱 MBR), : 在這 512 bytes 的 MBR 裡, 前 446 個 bytes 是放 bootloader 的地方, : 而後面 66 bytes 則是放 Partition table. : 要讀取 Partition table 並不需要用到 ioctl, 只要用 seek() 和 read() : 就可以了. 不寫程式用 dd 的方式也可以讀寫你的 partition table. 我寫了以下的程式: #include <stdio.h> #include <stdlib.h> struct PARTITIONINFO { unsigned char bootable; /* bootable? 0=no, 128=yes */ unsigned char begin_head; /* beginning head number */ unsigned char begin_sector; /* beginning sector number */ unsigned char begin_cylinder; /* 10 bit nmbr, with high 2 bits put in begsect */ unsigned char partition_type; /* Operating System type indicator code (partition type) */ unsigned char end_head; /* ending head number */ unsigned char end_secttor; /* ending sector number */ unsigned char end_cylinder; /* also a 10 bit nmbr, with same high 2 bit trick */ long int relsect; /* first sector relative to start of disk */ long int numsect; /* number of sectors in partition */ }; struct MBR { unsigned char codes_area[446]; struct PARTITIONINFO partition[4]; short int mbrid; }; int main(void) { printf("%d", sizeof(struct MBR)); return 0; } 不知道為甚麼我的輸出是 516 而不是我所預期的 512,我去 printf("%d", sizeof(struct PARTITIONINFO)) 是 16 沒錯 而 short int 也是 2 bytes, 但是整個就是不對,麻煩大大為我解答一下,感謝 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.244.54.130 ※ 編輯: Xphenomenon 來自: 210.66.37.44 (08/06 14:29)
kaichan:struct PARTITIONINFO { ... } __attribute__ ((packed)); 08/06 20:32
kaichan:應該是少加這個 我沒有驗證 你可以試看看 08/06 20:33
fxxkboss:應該是 strict MBR {...} __attribute__((packed)); 08/06 22:53
fxxkboss:446變448 short int 變 int 剛好多4bytes 08/06 22:54
kenlo1980:struct alignment? 08/07 19:19
Xphenomenon:感謝,可以了! 08/07 19:48