FUSE ファイルシステムのスーパーブロックで inode をループするにはどうすればよいですか? ドキュメントはこれについて何も指定していません。
2 に答える
nftw()
アクティブな FUSE インスタンスのマウント ポイントで呼び出すことにより、表示されているもの (エントリがあるもの) を反復処理できます。struct stat
指定したコールバックには、パスとファイルシステム内の各エントリが与えられます。返されたパスへのシステム コールを介して、対応する inode と対話できます。
FUSE はファイル システムではなく、従来の inode を含みません。これは、UNIX ファイル システム API が提供するものの逆を実装していると考えたほうがよいでしょう。たとえば、ファイルを開くときは、ファイル オープン システム コールを生成します。次に、カーネルはそのシステム コールを受け取り、ファイルを返します。
FUSE が行うことは、カーネルからそのシステム コールをユーザー空間に戻る FUSE アプリケーションにリダイレクトすることです。次に、アプリケーションはそのシステム コールへの応答方法を決定し、カーネルに何かを返します。その後、カーネルはその応答を元の呼び出し元のアプリケーションに返します。
多くの場合、FUSE で何かをマウントするときは、物理メディアをマウントしていません。FUSE ファイル システムでファイルを開くと、実際のファイル システムのどこかに一時ファイルが作成され、そのファイルにデータがコピーされ、FUSE ファイルに対するほとんどのファイル操作呼び出しが作成された一時ファイルにリダイレクトされます。 .
ほとんどの FUSE アプリケーションは stat を実装し、実際の INODE 構造体が持つ情報の大部分を提供しますが、その情報には一般にポインターの側面はありません。
技術的な観点からは、マウントする EXT3 ファイル システムをマウント引数として取る EXT3 のようなものを FUSE に実装できます。その場合、潜在的に実際の INODE ポインターを持つ実際の INODES を想像できます。ただし、EXT3 の実装は、すべてのファイル システム コールが、ユーザー空間からカーネル、FUSE ユーザー空間からカーネル、FUSE ユーザー空間からカーネル、そして最後にアプリケーションに戻ることを伴うため、おそらくあまり人気がありません。FUSE は、パフォーマンスが重要でないファイル システムに適しています。