Fiche de suivi de l'aide inotify
Je suis à l'aide de inotify pour surveiller un local de fichier, par exemple "/root/temp" à l'aide de
inotify_add_watch(fd, "/root/temp", mask).
Lorsque ce fichier est supprimé, le programme sera bloqué par read(fd, buf, bufSize)
fonction. Même si je créer un nouveau "/root/temp" du fichier, le programme est encore en bloc par la fonction de lecture. Je me demande si inotify peut détecter que le fichier surveillé est créé et la fonction de lecture pouvez obtenir quelque chose à partir de fd, de sorte que la lecture ne sera pas bloqué pour toujours.
Voici mon code:
uint32_t mask = IN_ALL_EVENTS;
int fd = inotify_init();
int wd = inotify_add_watch(fd, "/root/temp", mask);
char *buf = new char[1000];
int nbytes = read(fd, buf, 500);
J'ai surveillé tous les événements.
Pour détecter le fichier créations vous avez besoin de regarder dans le répertoire contenant le fichier.
OriginalL'auteur user572138 | 2011-01-12
Vous devez vous connecter pour publier un commentaire.
Le problème est que
read
est une opération de blocage par défaut.Si vous ne voulez pas à bloc, utilisez
select
oupoll
avantread
. Par exemple:Note: code non testé.
l'extrait de code que je fournis: 1) d'Attente pour un nouvel événement pour les 50ms; 2) Si aucun événement n'est reçu pendant ce temps, il ne fait rien; 3) Si un événement est reçu, il lit l'événement; - Pour obtenir le comportement que vous avez décrit, il vous suffit de l'envelopper dans une boucle, comme vous l'avez mentionné.
Je pourrais avais mal compris ton premier post, je sais ce que tu veux dire maintenant. Je pense que c'est une bonne solution, merci.
Je suis content que cela a aidé. Je vous encourage à lire sur le système de réputation dans la FAQ, si vous ne l'avez pas encore.
OriginalL'auteur jweyrich
Afin de voir un nouveau fichier créé, vous avez besoin de regarder le répertoire, pas le fichier. Regarder un fichier devrait voir quand il est supprimé (IN_DELETE_SELF), mais ne peut pas repérer si un nouveau fichier est créé avec le même nom.
Vous devriez probablement regarder dans le répertoire pour IN_CREATE | IN_MOVED_TO pour voir les fichiers nouvellement créés (ou les fichiers déplacés en provenance d'un autre endroit).
Certains éditeurs et d'autres outils (par exemple, rsync) peut créer un fichier sous un nom différent, puis le renommer.
OriginalL'auteur MarkR