inotifyまたは他のアクセスを使用して開かれたファイルのファイル記述子を傍受するには?

inotifyまたは他のアクセスを使用して開かれたファイルのファイル記述子を傍受するには?

私は大学でオペレーティングシステムのコースを終え、Rustを使ってシステムレベルのプログラムで遊びたいと思います。私が探しているものの1つは、フォルダに開かれたファイルのファイル記述子を傍受し、それが指すファイルを新しいファイルに置き換える方法です。私はinotifyRustのいくつかのツールとボックスを使っていくつかのシステムコールを直接使ってこの問題を解決することができると思いますlibcが、Linux仮想ファイルシステムを理解するのが難しいです。命令などのファイルがどのようにfind動作するか、ファイルがどのように構成されているかを正確に説明する本がありますか?私はソースコードをダウンロードしましたが、coreutilsLinuxでファイル構造がどのように見えるかを理解するのに問題があります。本やリソースを要求することがいくつかのルールやアイテムに違反していることを知っていますが、カーネルとユーティリティがどのように連携するかについての明確なリソースが見つからないようです。私はUnixベースのシステムを使用することに非常に慣れていますが、今ではオープンソースのオペレーティングシステムの開発を始めています。私を正しい方向に導くのを助けてくれてありがとう。乾杯!

答え1

inotifyあなたのプロセスは何かが起こったという警告だけを受け取り、それからリモートファイル、ウィンドウの内容を同期し、ウイルス対策をトリガーするなどのタスクを実行できます。プロセスが開かれたファイル記述子を妨げることを許可しません。仮想ファイルシステムを作成する方が近い方法かもしれません。 FUSEを使用すると、ユーザープロセスでこれを実装できます。これらのファイルシステムはファイルにアクセスし、必要なすべての操作を実行できます。最善のアイデアは、おそらくオープンソースの例をインポートして分析したり、チュートリアル(Google FUSEファイルシステムチュートリアル)を開くことです。

find通常、各ディレクトリの内容とファイルに関するいくつかの情報(必要な場合があります)を取得するためにシステムコールを使用するopendirプログラムには、inotifyやFUSEなどの高度なAPIは必要ありません。readdirstat

「ファイルはどのように構成されていますか?」という質問にもっと正確に答える必要があります。多くのシステムでは、ファイルは、アプリケーションが目的の操作(読み取り、書き込み、検索)を実行するために使用できるバイトストリームであるAPIを公開しています。

ファイルシステムに関する質問の場合、答えはファイルシステムによって異なります。 FATでは、各ディレクトリエントリはそのファイルの最初のクラスタ(固定長ブロックセット)を指し、ファイル割り当てテーブルはどのクラスタが次のものかを示します。いくつかの他のファイルシステムは、各範囲(ブロック番号と複数のブロック)を指すBツリー構造を使用してより複雑です。バラよりhttps://en.m.wikipedia.org/wiki/B-tree良いオペレーティングシステムの本は、ここにある一般的な答えよりはるかに詳細です。 (一連の記事があります:Googleのパート1でext4を理解する、パート2、...パート6)

関連情報