Suppose I want to invoke some command on all files in a directory and set a watch to invoke that command on all files that get created in that directory. If I do:
while( ( sdi = readdir( d )) != NULL ) { ... }
closedir( d );
/* Files created here will be missed */
inotify_add_watch( ... );
then some files will potentially be missed. If I call inotify_add_watch() before the readdir(), files may be acted on twice (it would require a fair bit of infrastructure to prevent acting twice, and it seems that the edge cases would be difficult to handle). Is there a simple way to avoid having to record the names of all files worked on during the readdir loop and comparing those to the names returned in the inotify_event structure? I can minimize the amount of necessary comparisons with:
while( ( sdi = readdir( d )) != NULL ) { ... }
inotify_add_watch( ... );
while( ( sdi = readdir( d )) != NULL ) { /* record name */ ... }
closedir( d );
And usually the second readdir() loop will do nothing, but this feels like a bad hack.