2011-06-09 8 views
6

Otworzyłem super-blok i deskryptor grupy w systemie plików EXT2, ale nie wiem, jak odczytać na przykład katalog główny lub pliki w nim ...Jak odczytać i przejść i-węzłówki

Oto część tego, co mam

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); 

ale to następna część nie wydają się działać ...

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

Dlaczego czytasz partycję typu raw? –

+0

To zadanie, ale chciałbym również wiedzieć, jak to działa. –

+1

Co masz na myśli mówiąc "nie działa"? Czy podpala twój komputer lub molestuje twojego kota? – RedX

Odpowiedz

2

nie jestem całkowicie jasne, o co prosisz, ale tu idzie:

Aby odczytać zawartość katalogu, musisz po prostu zajrzeć do jego bloku, przejrzeć odpowiednie bloki na dysku określone przez wskaźniki i przeczytać znalezioną zawartość, aby uzyskać opisy plików w katalogu .

To całkiem sugestia na wysokim poziomie, ale reszta naprawdę sprowadza się do obrzucania szczegółami samych struktur systemowych.

ja polecam patrząc na rozdziale 4 to: http://www.nongnu.org/ext2-doc/ext2.html

a także upewnić się, że jesteś jasno określonych zainteresowanych w danym przypadku strukturach, które powinny być dostarczone do ciebie gdzieś w przydziale ..

+0

Skończyło się na tym, że korzystałem z tej strony internetowej, ale żaden nauczyciel nie ma dość tego, co nam zapewnił ... w tym nauczania! –

1

Deskryptor grupy blokowej to wszystko, czego potrzebujesz do przechodzenia przez system plików ext. Superblok daje ogólne informacje o systemie plików, a także lokalizację deskryptora grupy bloków (BGD). Po wejściu do BGD masz informacje o każdej grupie bloków w systemie plików.

Aby znaleźć katalog główny, należy zajrzeć do pierwszej grupy bloków i sprawdzić drugi i-węzeł; inaczej znany jako numer i-węzła 2. Można to osiągnąć z lokalizacji pierwszego i-węzła, + sizeof (i-węzła). Z kolei położenie pierwszego i-węzła można znaleźć wewnątrz wpisu BGD dla pierwszej grupy bloków.

Daj mi znać, jeśli potrzebujesz więcej informacji.