ディレクトリ内のすべてのファイルに対してコマンドを呼び出し、そのディレクトリ内に作成されるすべてのファイルに対してそのコマンドを呼び出すように監視を設定するとします。私が行った場合:
while( ( sdi = readdir( d )) != NULL ) { ... }
closedir( d );
/* Files created here will be missed */
inotify_add_watch( ... );
そうすると、一部のファイルが失われる可能性があります。readdir()の前にinotify_add_watch()を呼び出すと、ファイルが2回動作する可能性があります(2回動作しないようにするには、かなりのインフラストラクチャが必要であり、エッジケースの処理が難しいようです)。readdirループ中に処理されたすべてのファイルの名前を記録し、それらをinotify_event構造で返された名前と比較する必要を回避する簡単な方法はありますか?次の方法で、必要な比較の量を最小限に抑えることができます。
while( ( sdi = readdir( d )) != NULL ) { ... }
inotify_add_watch( ... );
while( ( sdi = readdir( d )) != NULL ) { /* record name */ ... }
closedir( d );
そして通常、2番目のreaddir()ループは何もしませんが、これは悪いハックのように感じます。