Re: [問題] 如何讀 partition table?
※ 引述《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)
推
08/06 20:32, , 1F
08/06 20:32, 1F
→
08/06 20:33, , 2F
08/06 20:33, 2F
→
08/06 22:53, , 3F
08/06 22:53, 3F
→
08/06 22:54, , 4F
08/06 22:54, 4F
推
08/07 19:19, , 5F
08/07 19:19, 5F
→
08/07 19:48, , 6F
08/07 19:48, 6F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章