私はinotifyを活用して多数のファイル(数万から数十万のファイル)への変更を追跡するソフトウェアを開発しています。私は次のアイデアを思いついた。
- ファイルごとに1つの時計
- 親ディレクトリごとに1つの時計
- inotifyを避け、ファイルシステムの変更を定期的に確認してください(推奨されません)。
私が見ているすべてのファイルと、ランタイムとサイズなど、いくつかの基本的な統計を含むデータベースがありますが、変更されたファイルが見つかるまで、そのディレクトリ内のすべてのファイルを計算する必要があります。
多数(100,000以上)のinotifyモニタと多数のstat呼び出しのどちらが高速ですか?
stat呼び出しの回数を減らすのは良いことですが、Inotifyについて知っていることが不足しています。
メモ:
これはサーバーではなくワークステーションで実行されます。主な目的は、クライアントとリモートサーバー間の変更(おそらくファイルシステム全体)を同期することです。
ベストアンサー1
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バイトを含めることができます。