Mon programme utilise inotify pour surveiller les modifications sur les fichiers. Mon code est le suivant:lire sur le descripteur inotify est bloqué pour toujours
fd = inotify_init();
wd = inotify_add_watch(fd, "./test.txt", IN_ALL_EVENTS);
len = read(fd, buff, BUFF_SIZE);
while (i < len) {
struct inotify_event *pevent = (struct inotify_event *) &buff[i];
//process events
i += sizeof(struct inotify_event) + pevent->len;
}
Cependant, après avoir eu plusieurs événements pour le premier changement dans les fichiers surveillés (événement IN_OPEN
, IN_MODIFY
, IN_ACESS
, etc.), par la suite des changements dans les fichiers surveillés ne génère aucune d'autres événements ==> mon programme traîner à la fonction de lecture (la lecture est bloquée)
Pourriez-vous les gars m'aider à expliquer cette erreur.
merci pour votre réponse. Ça m'aide beaucoup. Je veux juste vous poser une autre question. Pourquoi quand j'ouvre le fichier en utilisant Vim ou Gedit, j'ai toujours l'événement IN_DELETE_ITSELF? – khanhhh89
@ khanhhh89 Je crois que vous avez édité "test.txt" et enregistrez-le. Mon vim est 7.3 et je trouve qu'il utilise réellement 'open (" test.txt ", O_WRONLY | O_CREAT | O_TRUNC, 0664)' et y écrit le contenu. Donc je crois que ** IN_DELETE_ITSELF ** est causé par O_TRUNC. – xgwang
@wgwang Donc, c'est la raison pour laquelle, après avoir lu les premiers événements, en utilisant inotify_add_watch ("test.txt") à nouveau se traduira par une erreur "Aucun fichier ou répertoire" ??? – khanhhh89