7

EXT2ファイルシステムでスーパーブロックとグループ記述子を開きましたが、たとえばルートディレクトリやその中のファイルを読み取る方法がわかりません...

これが私が得たもののいくつかです

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

しかし、この次の部分は機能していないようです...

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

2 に答える 2

3

私はあなたが何を求めているのか完全にはわかりませんが、ここに行きます:

ディレクトリの内容を読み取るには、基本的に、そのポインタブロックの内部を調べ、ポインタで指定されたディスク上の対応するブロックを調べ、そこにある内容を読んで、ディレクトリ内のファイルの説明を取得する必要があります。

これはかなり高レベルの提案ですが、残りは実際にはシステム構造自体の詳細をいじくりまわすことになります。

この第4章をご覧になることをお勧めします。

https://www.nongnu.org/ext2-doc/ext2.html

また、あなたのケースに関係する特定の構造体を明確にしてください。これは、割り当てのどこかで提供される必要があります...

于 2011-08-15T05:34:21.387 に答える
1

ブロックグループ記述子は、extファイルシステムをトラバースするために必要なすべてです。スーパーブロックは、ファイルシステムに関する一般的な情報と、ブロックグループ記述子(BGD)の場所を提供します。BGD内に入ると、ファイルシステム内のすべてのブロックグループに関する情報が得られます。

ルートディレクトリを探すには、最初のブロックグループを調べて、2番目のiノードを調べる必要があります。iノード番号2とも呼ばれます。これは、最初のiノードの位置+ sizeof(inode)から到達できます。次に、最初のiノードの場所は、最初のブロックグループのBGDエントリ内にあります。

さらに情報が必要な場合はお知らせください。

于 2012-12-15T22:59:43.020 に答える