inotifyはwrite_closeイベントを失うことなく新しいファイルの書き込みを検出します。

inotifyはwrite_closeイベントを失うことなく新しいファイルの書き込みを検出します。

ディレクトリのプロセスによって生成され、作成されたファイルを見たいです。inotifywaitツールにアクセスできないため、Inotifyライブラリ呼び出しのみを使用してください。まず、IN_CREATEファイルが作成されたかどうかを監視します。興味のあるファイルが作成されたら、CLOSE_WRITE監視するイベントを追加します。このスキームは、マイハンドラがイベントを処理するときにファイルがすでに作成され閉じられていて、IN_CREATEその書き込みイベントを見逃すことを除いて機能します。

この状況を解決するための最良の方法は何ですか?statを使用する機能を使用しようとしていますがatimmtim問題があるかどうかはわかりません。たとえば、現在のタイムスタンプがst_ctimより​​大きいかどうか、st_ctimがst_atimより​​大きいかどうかを確認します。これら2つの条件は、現在の時刻より前にファイルの状態が変更(アクセスおよび変更)されたことを示します。

ベストアンサー1

まず、「関心のあるファイルが作成されたら、監視するCLOSE_WRITEイベントを入力します」という言葉が何を意味するのかわかりません。

互いに切り替えることIN_CREATEなく、同じアンケートで監視できます。IN_CLOSE_WRITEイベントが発生すると、inotify_eventinotifyハンドラ(から返されるinotify_init())から構造を読み取ることができ、そのフィールドはmask実際にどのイベントが発生したかを示します。

第二に、inotifyイベントが欠落している可能性があります。文書に明確に記載されています。考えられる問題の完全なリストは、の「制限と警告」のタイトルの下にリストされていますinotify(7)

「キューオーバーフロー」状況が発生したようです。はい、これは実際の状況であり、使用量の多いシステムで頻繁に発生します。残念ながら、これは修正できません。ただ解決してください。これを解決するにはいくつかの方法がありますが、必要なものがよりよく理解されていない場合は、具体的に説明できません。

通常、更新後すぐに更新されたファイルを表示するには、ファイルscandir()ごとに並べ替えるか、ファイルディレクトリをフィルタリングしますmtime。この場合、inotifyは「ディレクトリで発生した問題」のウェイクアップ呼び出しとして機能し、受信するとすべての更新を確認する長期実行プロセスに入ります。終わったらベッドで寝てくださいpoll()。この場合、poll()あるイベントの終わりと次のイベントの開始の間に発生するイベントは無視されます。ただし、すべてのアップデートが一括で受信されます。

おすすめ記事