1

readdir() の各レコードの統計構造体を設定し、その対応する統計をフィラー() 経由で getattr に渡そうとしています。 FUSE は、readdir に入力されたときに stat 構造体の特定のフィールドのみを認識することをどこかで読みました (接する質問: これは常にそうですか?)。どうやら、これらの受け入れられるフィールドの 1 つが st_ino です。ただし、特定のレコードの readdir() で stat 構造体の st_ino を設定すると、getattr() でそのレコードに対応する変更が表示されません。

上記の問題で解決しようとしている問題は、レコードごとに readdir から getattr に (非 POSIX) 情報を渡したいということです。当初、私のハックは、この (非 POSIX) 情報を含むデータベースへの主キーとして機能する各レコード名に一意の識別子を追加することでした。このソリューションの問題点は、ユーザーが「ls」を発行したときにファンキーな命名スキームが表示されることです。この主キーを st_ino フィールドに格納できれば、ユーザーに命名規則を知らなくてもレコードを一意に識別できます。したがって、この問題の別の解決策は、readdir がレコード バッファに入力する名前を、ls が画面に表示する名前に変更する方法を見つけることだと思います。ただし、FUSE ソースを変更せずにそれが可能かどうかはわかりません。

どんな助けでも大歓迎です!

4

1 に答える 1

1

私はずっと前にいくつかの FUSE ファイルシステムを書きましたが、これは私には少しぼやけています。しかし、私の古いコードを見ると、FUSE が private_data フィールドを許可していることがわかります。必要に応じて、private_data の情報を管理できます。これにより、ファイルの名前空間や特定の用途のために予約されているその他のデータ メンバーを汚染することなく、readdir から getattr に情報を転送するメカニズムが提供されます。

于 2013-03-13T06:42:24.237 に答える