C 言語を使用して、ext2 イメージ内の特定の i ノード (その番号を使用) にアクセスしたいと考えています。open() システムコールで ext2 イメージを開き、inode に到達するまで、適切なオフセットで lseek() を使用してトラバースすることで、これを実行しようとしています。これは正しいです?それとも私は何か間違ったことをしていますか?open() の使用が正しいのか、それともこれを行うためのより適切な関数があるのか、少し混乱しています。
int fd = open("ext2fs.img", O_RDONLY);
assert(fd != -1);
off_t startPosition = lseek(fd, 0, SEEK_CUR);
assert(startPosition != -1);
inode に到達するまで、startPosition にオフセットを追加する必要がありますか? しかし、特定の inode を検索するにはどうすればよいでしょうか?
UPDATED(より具体的に)
私はすでに ext2 ファイル システム ( http://www.nongnu.org/ext2-doc/ext2.html ) のレイアウトを持っています。これにより、必要なすべて (すべてのオフセット) が得られます。そして、メタデータとデータを操作する C プログラムを作成する必要があります。たとえば、ファイルの削除とコピーのように。
何をすべきかはわかっていますが、それを実装するのに問題があります。
例: 自分が何をしているかを理解しているかどうかをテストするために、教授から提供された ext2 ディスク イメージの空き inode の数を読み取ろうとしています。
#define SUPER_BLOCK 1024
int main()
{
int freeInodes;
int fd = open("path.img", O_RDONLY);
off_t startPosition = lseek(fd, 0, SEEK_CUR);
lseek(fd, startPosition + SUPER_BLOCK + 16, SEEK_CUR);
read(fd, freeInodes, 4);
printf("Number of free inodes: %d", freeInodes);
}
私が受け取る出力は次のとおりです。「空き inode の数: 32767」
read() から取得したデータを正しく解釈していますか? 受け取ったこの値が正しいかどうかはわかりません。