回答:
カーネルに特定のパスへの変更を通知するだけにすることはできません。理由は少し微妙です:
Linuxでは、ファイルオブジェクトは、その名前とは無関係に存在します。ファイルの名前は実際にはそれらを含むディレクトリの属性であり、単一のファイルが複数の名前で呼び出される場合があります(ハードリンクを参照)。
カーネルには、inotifyオブジェクトをアタッチするものが必要です。パス名は実際のファイルシステムオブジェクトではないため、オブジェクトをパス名にアタッチできません。親ディレクトリまたはパスが示すファイルに添付する必要があります。ただし、ファイルに添付することはできません。特定のファイルを変更するのではなく、特定の名前のファイルが作成されるかどうかを監視しているためです。
理論的には、カーネルは、ウォッチをディレクトリに追加するときに特定のパス名のイベントを選択できるAPIを実装できます。これは、イベントのタイプを選択できるのとほぼ同じです。これはAPIを膨らませ、最終的にカーネルは同じデータを処理し、ユーザー空間で行うのと同じ文字列比較を行います。
非常にアクティブなディレクトリにウォッチを配置すると、パフォーマンスに顕著な影響はありますか?あなたがどれほど活発であるかわかりません。毎秒数十のファイル、数百、数百万?
いずれにせよ、私は避けたいと思いaccess
ます:それは常にレースになるでしょう。への呼び出しの間にファイルが作成および削除される可能性があり、非常にタイトなループでのaccess
呼び出しaccess
は遅くなり、inotify
解決するように設計された種類の問題です。
inotify
かどうか、パフォーマンスが実際に問題だったかどうかをもう一度尋ねる必要があります。
access
とF_OK
、それはまだ存在しているかどうかを確認します。