2011-06-09 4 views
6

ho aperto il super-blocco e descrittore di gruppo in un file system EXT2, ma non so come leggere ad esempio la directory principale o file in essa ...Come faccio a leggere e inode traslazione

Ecco alcune delle cose che ho ottenuto

fd=open("/dev/sdb2", O_RDONLY); 
lseek(fd, SuperSize, SEEK_SET); 
read(fd, &super_block, SuperSize); 
lseek(fd, 4096, SEEK_SET); 
read(fd, &groupDesc, DescriptSize); 

ma questa parte successiva non sembra funzionare ...

lseek(fd, super_block.s_log_block_size*groupDesc.bg_inode_table, SEEK_SET); 
lseek(fd, InodeSize*(EXT2_ROOT_INO-1), SEEK_CUR); 
read(fd, &root, InodeSize); 
+0

Perché stai leggendo la partizione raw? –

+0

È un compito, ma mi piacerebbe anche sapere come funziona –

+1

Cosa intendi con "non funziona"? Ha dato fuoco al tuo computer o molestato il tuo gatto? – RedX

risposta

2

io non sono del tutto chiaro che cosa stai chiedendo, ma qui va:

Per leggere il contenuto della directory, basterà guardare all'interno del suo blocco puntatore, osservare i blocchi corrispondenti sul disco specificati dai puntatori e leggere i contenuti trovati lì per ottenere le descrizioni dei file nella directory .

Questo è un suggerimento di alto livello, ma il resto in realtà si riduce ai dettagli delle strutture di sistema.

avrei raccomando guardando il capitolo 4 del presente: http://www.nongnu.org/ext2-doc/ext2.html

e anche fare in modo che sei chiare sulle struct specifici interessati nel tuo caso, che dovrebbero essere fornite per voi da qualche parte in assegnazione ..

+0

Ho finito per utilizzare quel sito web a tonnellate, ma nessun mio insegnante è piuttosto privo di quello che ci ha fornito ... compreso l'insegnamento! –

1

Il descrittore del gruppo di blocchi è tutto ciò che serve per attraversare un file system ext. Il superblocco fornisce informazioni generali sul file system e sulla posizione del descrittore del gruppo di blocchi (BGD). Una volta all'interno del BGD, si hanno informazioni su ciascun gruppo di blocchi all'interno del file system.

Per cercare la directory radice, è necessario esaminare il primo gruppo di blocchi e ispezionare il secondo inode; altrimenti noto come inode numero 2. Questo può essere raggiunto dalla posizione del primo inode, + sizeof (inode). A sua volta, la posizione del primo inode può essere trovata all'interno della voce BGD per il primo gruppo di blocchi.

Fatemi sapere se avete bisogno di maggiori informazioni.