Detecting file changes on macOS with kqueue
L'auteur a écrit un petit surveillant de fichiers en Go utilisé pour relancer automatiquement des commandes lors de modifications de fichiers, avec deux modes : surveiller des fichiers explicitement indiqués ou tous les fichiers du répertoire de travail. Sur macOS la surveillance s'appuie sur kqueue via la bibliothèque fsnotify, et kqueue utilise kevent avec des champs ident, filter, flags, fflags et udata pour enregistrer et recevoir des événements. Pour surveiller des fichiers on utilise le filtre EVFILT_VNODE avec le flag NOTE_WRITE et on enregistre les événements avec EV_ADD|EV_CLEAR afin d'éviter des notifications répétées pour le même changement. Le texte donne un exemple en C qui ouvre chaque fichier avec O_EVTONLY, enregistre les kevent et boucle en appelant kevent pour afficher les écritures, et explique que surveiller un répertoire seul n'attrape pas les modifications de fichiers existants, il faut donc ouvrir et ajouter chaque fichier contenu. L'implémentation Go montre la gestion d'un kqueue avec CloseOnExec, l'ouverture des fichiers avec O_EVTONLY|O_CLOEXEC, la tenue de tables fd↔chemin, une boucle d'attente renvoyant le chemin modifié, et note les limites de kqueue (consommation d'un descripteur par fichier) en suggérant FSEvents ou le polling comme alternatives.