5

現在、カーネル関数で特定のパス名の inode を取得しようとしています。私が利用できるのは完全なパス名だけです。私は次のような試みを試みました:

user_path_at(AT_FDCWD, buffer, LOOKUP_FOLLOW, &path);

しかし、その指定されたパスの dentry は有効ではないようです。次に、おそらく stat() を試して、そこから inode 番号を取得することを考えました。ただし、それは構造体のiノードではなく、番号のみを提供します。既存の inode を取得して inode のリスト全体を走査せずに inode 番号を inode に変換する方法を知りません。そして、それがうまくいくかどうかさえわかりません。しかし、私は確かにそれをしたくありません。

カーネル内の char *pathname から構造体 i ノードを取得する簡単な方法はありますか?

4

2 に答える 2

2

stat()st_ino" " フィールドにファイルの inode が表示されます。

申し訳ありませんが、質問の最初の誤解。

カーネル内の実際の inode 構造が必要な場合は、カーネル自体が inode 番号を探して配列やリストをたどらないことは確かです (リストが非常に小さい場合を除きます)。カーネルのコードは公開されているので、それがどのように行われるかを調べて、同じことを行うことができるはずです。

于 2009-03-02T00:12:37.790 に答える
0

struct inode はカーネルの一部であり、ユーザー空間にいるため、簡単な方法はありません。それはすべて、特定のファイルシステムの実装に依存します。stat 構造体の情報がニーズに十分でないと確信していますか?

とにかく、このリンクが役立つかもしれません。

于 2009-03-02T00:19:44.967 に答える