Supposons que je souhaite invoquer une commande sur tous les fichiers d'un répertoire et que vous définissiez une surveillance pour invoquer cette commande sur tous les fichiers créés dans ce répertoire. Si je le fais:Comment éviter cette condition de concurrence avec readdir/inotify?
alors certains fichiers seront potentiellement manqués. Si j'appelle inotify_add_watch() avant le readdir(), les fichiers peuvent être traités deux fois (il faudrait un peu d'infrastructure pour éviter d'agir deux fois, et il semble que les cas de bord seraient difficiles à gérer). Y at-il un moyen simple d'éviter avoir à enregistrer les noms de tous les fichiers travaillés sur la boucle readdir et en les comparant aux noms retournés dans la structure inotify_event? Je peux minimiser la quantité de comparaisons nécessaires avec:
while((sdi = readdir(d)) != NULL) { ... } inotify_add_watch(...); while((sdi = readdir(d)) != NULL) { /* record name */ ... } closedir(d);
Et généralement, la deuxième boucle readdir() ne fera rien, mais cela se sent comme un mauvais hack.