私は、inotifyを利用して大量のファイル(数万から数十万のファイル)の変更を追跡するソフトウェアを開発しています。私はこれらのアイデアを思いつきました:
- ファイルごとに1つのウォッチ
- 親ディレクトリごとに1つのウォッチ
- inotifyを避け、定期的にfsをスキャンして変更を確認します(推奨されません)
監視しているすべてのファイルといくつかの基本的な統計情報(mtimeやsizeなど)のデータベースがありますが、変更されたファイルが見つかるまで、そのディレクトリ内の各ファイルを統計する必要があります。
何トン(100,000以上)のinotifyウォッチと、何トンもの統計呼び出しのどちらが速いでしょうか?
統計呼び出しの数を減らす方が良いと思いますが、inotifyについては十分にわかりません。
注:
これは、サーバーではなくワークステーションで実行されます。主な目的は、クライアントとリモートサーバー間で変更を(場合によってはファイルシステム全体に)同期させることです。
承認された回答:
read()
を実行するとき inotify fd、name
返された構造体のフィールドは、監視されているディレクトリに関連して変更されたファイルを示しているため、イベント後にディレクトリ内のすべてのファイルを統計する必要はありません。
http://linux.die.net/man/7/inotify
を参照してください具体的には:
struct inotify_event { int wd; /* Watch descriptor */ uint32_t mask; /* Mask of events */ uint32_t cookie; /* Unique cookie associating related events (for rename(2)) */ uint32_t len; /* Size of 'name' field */ char name[]; /* Optional null-terminated name */ };
名前フィールドは、監視対象ディレクトリ内のファイルに対してイベントが返された場合にのみ表示されます
。監視対象ディレクトリに相対的な
ファイルパス名を識別します。このパス名はnullで終了し、
さらにnullバイトを含めて、後続の読み取りを適切な
アドレス境界に揃えることができます。