特定のファイル名が生成されたら通知を受けたいです。私が見ています。inotify
。このIN_CREATE
フラグを使用してディレクトリ内のすべての変更を監視できますが、関心のあるファイルに加えてディレクトリに多くのアクティビティがある可能性があるため、ディレクトリ全体を監視したくありません。これは可能ですか?
答え1
カーネルに特定のパスに対する変更のみを通知させることはできません。その理由は少し微妙です。
Linuxでは、ファイルオブジェクトは名前に関係なく存在します。ファイル名は実際に含まれるディレクトリの属性であり、単一のファイルは複数の名前で呼び出すことができます(ハードリンクを参照)。
カーネルには inotify オブジェクトを追加するエントリが必要です。パス名は実際のファイルシステムオブジェクトではないため、パスで説明されている親ディレクトリまたはファイルに追加する必要があります。ただし、指定されたファイルに対する変更ではなく、指定された名前のファイルが作成されたかどうかを観察しているため、ファイルに追加することはできません。
理論的には、カーネルはイベントタイプを選択できるのと同じように、ディレクトリに監視を追加するときに特定のパス名のイベントを選択できるAPIを実装できます。これにより、APIが肥大化し、カーネルは最終的にユーザー空間と同じデータを処理し、同じ文字列比較を実行します。
非常にアクティブなディレクトリに時計を配置すると、パフォーマンスに大きな影響がありますか?毎秒数十、数百、数百万のファイルがどれほどアクティブであるかを知らない。
とにかく、私はそれを避けたいと思いますaccess
。それはいつも混乱するでしょう。呼び出しの間にファイルを作成して削除することができ、非常にaccess
緊密access
なループで呼び出すと速度が遅くなる可能性があります。これがinotify
解決するように設計された問題です。