2011-07-16 17 views
2

FUSEファイルシステムのスーパーブロック内のiノードをループバックするにはどうすればよいですか?ドキュメントはこれについて何も指定していない。FUSEファイルシステム操作

+0

* inodes *をループするのはどういう意味ですか? – kamae

+0

私が言っていることは、各iノードへのポインタを持たせたいということです。 – atx

+6

FUSEはインターフェイスであり、ファイルシステムではありません。 FUSEバックエンドによって表される仮想ファイルシステムは、inodeやスーパーブロックを持たないかもしれず、列挙可能な形式でファイルを表現しないかもしれません。 (例えば、可能なすべてのファイル名を含むFUSEファイルシステムを書くのは簡単です。 – duskwuff

答えて

4

アクティブなFUSEインスタンスのマウントポイントでnftw()を呼び出すことで、表示されているもの(エントリのあるもの)を反復処理できます。指定したコールバックにはパスが与えられ、ファイルシステムの各エントリにはstruct statが与えられます。返されたパスへのシステムコールを介して、対応するinodeと対話することができます。

+0

これを 'nftw'にします。それはやや柔軟性があり、普通の 'ftw'を廃止することを意味すると私は信じている。 –

4

FUSEはファイルシステムではなく、従来のinodeは含まれていません。これは、UNIXファイルシステムAPIが提供するものの逆を実装するものと考える方が良いです。たとえば、ファイルを開くと、ファイルオープンシステムコールが生成されます。カーネルはそのシステムコールを受け取り、ファイルを返します。

FUSEの機能はカーネルからのもので、システムコールをユーザ空間に戻ってくるFUSEアプリケーションにリダイレクトします。アプリケーションは、そのシステムコールにどのように応答するかを決定し、何かをカーネルに返します。カーネルはその応答を元の呼び出し元のアプリケーションに戻します。

多くの場合、FUSEで何かをマウントすると、物理メディアをマウントしていません。 FUSEファイルシステムでファイルを開くと、おそらく実際のファイルシステム上に一時ファイルを作成し、そのファイルにデータをコピーし、FUSEファイル上のほとんどのファイル操作呼び出しを、作成した一時ファイルにリダイレクトします。

ほとんどのFUSEアプリケーションはstatを実装し、実際のINODE構造体が持つ情報の大部分を提供しますが、その情報には一般的にポインタのアスペクトがありません。

技術的な観点からは、FUSEにEXT3のようなものを実装することができます.FUSEではマウントするEXT3ファイルシステムをマウント引数として使用します。その場合、実際のINODESポインタを使って実際のINODESを想像することができます。しかし、EXT3の実装は、おそらくすべてのファイルシステムコールがユーザ空間からカーネルへ、FUSEのユーザ空間からカーネル、FUSEのユーザ空間からカーネルまで、そしてついにはアプリケーションに戻ることになるため、かなり不評です。パフォーマンスが重要ではないファイルシステムに対して、FUSEはより意味を持ちます。

+0

ありがとう、ありがとう。私はマットは私が後にしている解決策があると思う。 – atx

関連する問題