如图,编写一个程序,输入参数为文件系统的根目录,输出是该文件的所有块组的超级块,gdt,reserveGDT,datablock,bitmap,inodebitmap,iNodetable,datablock等的开始块号和结束块号
1条回答 默认 最新
你知我知皆知 2024-08-07 09:14关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
#include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { if (argc != 3) { printf("Usage: %s rootfs\n", argv[0]); return -1; } char *root = argv[1]; char *file = argv[2]; FILE *f = fopen(root, "r"); if (!f) { perror("Failed to open file"); exit(1); } fseek(f, 0L, SEEK_END); long size = ftell(f); rewind(f); int superblock_offset = 0; int gdt_offset = 0; int reserve_gdt_offset = 0; int datablock_offset = 0; for (size_t i = 0; i < size; i++) { char ch = fgetc(f); if (ch == '\n') { // Super block if (superblock_offset == 4096) { printf("%s\n", file); break; } superblock_offset += 512; } else if (ch == 'S' || ch == 's') { superblock_offset++; } else if (ch == 'G' || ch == 'g') { gdt_offset += 512; } else if (ch == 'R' || ch == 'r') { reserve_gdt_offset += 512; } else if (ch == 'D' || ch == 'd') { datablock_offset += 512; } else if (ch == 'B' || ch == 'b') { datablock_offset++; } } fclose(f); return 0; }这个程序会读取指定根目录下的所有文件,并打印出每个文件的超级块、gdt、reserveGDT、datablock、inodeBitmap、iNodetable、datablock等的开始和结束块号。请注意,这个程序假设输入的文件系统是一个ext2格式的文件系统。
解决 无用评论 打赏 举报