2011-06-09 26 views
6

Tôi đã mở trình mô tả siêu khối và nhóm trong hệ thống tệp EXT2, nhưng tôi không biết cách đọc thư mục gốc hoặc tệp trong đó ...Làm cách nào để đọc và đọc các nút in

Dưới đây là một số những gì tôi đã nhận

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

nhưng phần tiếp theo này dường như không làm việc ...

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

Tại sao bạn đọc phân vùng thô? –

+0

Đó là một bài tập, nhưng tôi cũng muốn biết cách hoạt động của nó –

+1

Bạn có ý nghĩa gì với "không hoạt động"? Liệu nó có đặt máy tính của bạn trên lửa hoặc quấy rối con mèo của bạn? – RedX

Trả lời

2

tôi không hoàn toàn rõ ràng những gì bạn đang yêu cầu, nhưng ở đây đi:

Để đọc nội dung của thư mục, về cơ bản bạn cần nhìn vào bên trong khối con trỏ của nó, xem các khối tương ứng trên đĩa được chỉ định bởi con trỏ và đọc nội dung tìm thấy ở đó để lấy mô tả về các tệp trong thư mục .

Đó là một đề xuất cấp độ khá cao, nhưng phần còn lại thực sự đi xuống để mucking với các chi tiết của cấu trúc hệ thống mình.

tôi muốn khuyên bạn nên nhìn vào chương 4 điều này: http://www.nongnu.org/ext2-doc/ext2.html

và cũng đảm bảo rằng bạn rõ ràng về cấu trúc cụ thể liên quan trong trường hợp của bạn, cần được cung cấp cho bạn ở đâu đó trong việc chuyển nhượng ..

+0

Tôi đã kết thúc bằng cách sử dụng trang web đó một tấn, nhưng không có giáo viên của tôi là khá thiếu về những gì ông đã cung cấp cho chúng tôi ... bao gồm cả giảng dạy! –

1

Trình mô tả nhóm khối là tất cả những gì bạn cần để duyệt qua hệ thống tệp ext. Superblock cung cấp cho bạn thông tin chung về hệ thống tệp, cũng như vị trí của bộ mô tả nhóm khối (BGD). Khi đã ở trong BGD, bạn có thông tin về từng nhóm khối trong hệ thống tệp.

Để tìm thư mục gốc, sau đó bạn cần xem xét nhóm khối FIRST và kiểm tra inode thứ hai; nếu không được gọi là số inode 2. Điều này có thể đạt được từ vị trí của inode đầu tiên, + sizeof (inode). Đổi lại, vị trí của inode đầu tiên có thể được tìm thấy bên trong mục nhập BGD cho nhóm khối đầu tiên.

Hãy cho tôi biết nếu bạn cần thêm thông tin.

Các vấn đề liên quan