3

Linux カーネル コードで のコードを確認inodeしましたが、 のデータ ポインタがどこにあるのかわかりませんinode。15 個のポインタ [0-14] があり、そのうち 12 個が直接、1 個が単一間接、1 個が二重間接、1 個が三重間接であることを知っています。

これらのデータメンバーを見つけてください。また、Google でさまざまなキーワードを何度も検索しましたが、すべて無駄だったので、これらをどのように見つけたかを指定してください。

4

2 に答える 2

4

データにアクセスするのは特定のファイル システムに依存するため、一般に「データ ポインター」はありません (一部のファイル システムは仮想である場合があり、そのデータをオンザフライで生成したり、ネットワークから取得したりすることを意味します)。

に興味がext4ある場合は、ext4 固有の inode 構造 ( struct ext4_inode) を で調べることができますfs/ext4/ext4.h。ここで、inode のデータは、12 の直接ブロックのインデックス、単一の間接ブロックの 1 つ、二重の間接ブロックの 1 つ、および 3 つの間接ブロックの 1 つのインデックスによって実際に参照されます。 .

これは、inode のデータのブロック [0..11] には数字があることを意味しますがe4inode->i_block[0/1/.../11]e4inode->i_block[12]はデータ ブロック番号自体で埋められたブロックの数字です (したがって、範囲 [12, 12 + fs- の inode のデータ ブロックのインデックスを保持します)。 >block_size / sizeof(__le32)]. 同じトリックが に適用されi_block[13]ますが、 index から始まる二重間接インデックス (実際のデータを保持するブロックのリストを保持するブロックのインデックスで満たされたブロック) を保持し、トリプル間接インデックス12 + fs->block_size / sizeof(__le32)を保持するだけです。i_block[14]

于 2012-12-07T16:44:18.607 に答える