fswatch
est un moniteur de modifications de fichiers qui reçoit des notifications lorsque le contenu des fichiers ou répertoires spécifiés est modifié. fswatch
implémente plusieurs moniteurs :
stat (2)
peut être utilisé). fswatch
devrait être construit et fonctionner correctement sur tout système doté de l'une des API susmentionnées.
fswatch
est une interface de libfswatch
, une bibliothèque avec liaison C et C++. Plus d’informations sur libfswatch
peuvent être trouvées ici.
Les principales fonctionnalités fswatch
sont :
Les limitations de fswatch
dépendent en grande partie du moniteur utilisé :
Le moniteur FSEvents , disponible uniquement sur macOS, n'a aucune limitation connue et s'adapte très bien au nombre de fichiers observés.
Le moniteur de notification des événements de fichiers , disponible sur les noyaux Solaris et ses dérivés, n'a aucune limitation connue.
Le moniteur kqueue , disponible sur tout système *BSD doté de kqueue, nécessite qu'un descripteur de fichier soit ouvert pour chaque fichier surveillé. En conséquence, ce moniteur évolue mal avec le nombre de fichiers observés et peut commencer à mal se comporter dès que le processus fswatch
manque de descripteurs de fichiers. Dans ce cas, fswatch
génère une erreur sur l'erreur standard pour chaque fichier qui ne peut pas être ouvert.
Le moniteur inotify , disponible sous Linux depuis le noyau 2.6.13, peut subir un débordement de file d'attente si les événements sont générés plus rapidement qu'ils ne sont lus dans la file d'attente. Dans tous les cas, l'application est assurée de recevoir une notification de débordement qui peut être gérée pour récupérer en douceur. fswatch
lève actuellement une exception si un débordement de file d'attente se produit. Les versions futures géreront le débordement en émettant des notifications appropriées.
Le moniteur Windows ne peut établir qu'une surveillance des répertoires , pas des fichiers. Pour surveiller un fichier, son répertoire parent doit être surveillé afin de recevoir des événements de modification pour tous les enfants du répertoire, de manière récursive à n'importe quelle profondeur. En option, les événements de modification peuvent être filtrés pour inclure uniquement les modifications apportées au fichier souhaité.
Le moniteur de sondage , disponible sur n'importe quelle plate-forme, s'appuie uniquement sur le processeur et la mémoire disponibles pour effectuer sa tâche. Les performances de ce moniteur se dégradent linéairement avec le nombre de fichiers visionnés.
Les recommandations d'utilisation sont les suivantes :
Sur macOS, utilisez uniquement le moniteur FSEvents
(qui est le comportement par défaut).
Sur Solaris et ses dérivés, utilisez le moniteur de notification des événements de fichiers .
Sous Linux, utilisez le moniteur inotify
(qui est le comportement par défaut).
Si le nombre de fichiers à observer est suffisamment petit, utilisez le moniteur kqueue
. Attention, sur certains systèmes, le nombre maximum de descripteurs de fichiers pouvant être ouverts par un processus est défini sur une valeur très faible (des valeurs aussi basses que 256 ne sont pas rares), même si le système d'exploitation peut autoriser une valeur beaucoup plus élevée. Dans ce cas, consultez la documentation de votre système d’exploitation pour augmenter cette limite soit par processus, soit à l’échelle du système.
Si possible, surveillez les répertoires plutôt que les fichiers. Concevoir correctement le côté réception des événements pour gérer les répertoires peut réduire considérablement la consommation de ressources du moniteur.
Sous Windows, utilisez le moniteur windows
.
Si aucune des réponses ci-dessus ne s’applique, utilisez le moniteur de sondage. L'expérience des auteurs indique que fswatch
nécessite environ 150 Mo de mémoire RAM pour observer une hiérarchie de 500 000 fichiers avec une longueur de chemin minimale de 32 caractères. Un goulot d'étranglement courant du moniteur d'interrogation est l'accès au disque, car l'exécution stat()
sur un grand nombre de fichiers peut prendre énormément de temps. Dans ce cas, la latence doit être définie sur une valeur suffisamment élevée afin de réduire la dégradation des performances pouvant résulter d'un accès fréquent au disque.
Un utilisateur régulier pourra peut-être récupérer fswatch
à partir du gestionnaire de paquets de votre système d'exploitation ou d'un tiers. Si vous recherchez fswatch
pour macOS, vous pouvez l'installer en utilisant MacPorts ou Homebrew :
# MacPorts
$ port install fswatch
# Homebrew
$ brew install fswatch
Sur FreeBSD, fswatch
peut être installé en utilisant pkg :
# pkg install fswatch-mon
Vérifiez votre gestionnaire de paquets préféré et faites-nous savoir si fswatch
y manque.
Un utilisateur qui souhaite construire fswatch
doit obtenir une archive tar de version. Une archive tar de version contient tout ce dont un utilisateur a besoin pour créer fswatch
sur son système, en suivant les instructions détaillées dans la section Installation ci-dessous et dans le fichier INSTALL
.
Un développeur qui souhaite modifier fswatch
doit obtenir les sources (soit à partir d'une archive tar des sources, soit en clonant le référentiel) et avoir le système GNU Build installé sur sa machine. Veuillez lire README.gnu-build-system
pour obtenir plus de détails sur la façon de démarrer fswatch
à partir de sources sur votre machine.
Obtenir une copie du référentiel source n'est pas recommandé, sauf si vous êtes un développeur, si le système GNU Build est installé sur votre machine et si vous savez comment l'amorcer sur les sources.
Consultez le fichier INSTALL
pour des informations détaillées sur la configuration et l'installation fswatch
. Étant donné que fswatch
construit et utilise des bibliothèques dynamiques, sur certaines plates-formes, vous devrez peut-être effectuer des tâches supplémentaires avant de pouvoir utiliser fswatch
:
Assurez-vous que le répertoire d'installation des bibliothèques dynamiques ( $PREFIX/lib
) est inclus dans les chemins de recherche de l'éditeur de liens dynamiques de votre système d'exploitation. Le chemin par défaut, /usr/local/lib
, fonctionnera dans presque tous les systèmes d'exploitation.
L'actualisation des liens et du cache vers les bibliothèques dynamiques peut être nécessaire. Sur les systèmes GNU/Linux, vous devrez peut-être exécuter ldconfig
:
$ ldconfig
fswatch
est un programme C++ et un compilateur C++ conforme à la norme C++11 est requis pour le compiler. Consultez la documentation de votre système d’exploitation pour plus d’informations sur la façon d’installer la chaîne d’outils C++ et le runtime C++.
Aucun autre progiciel ou dépendance n'est requis pour configurer et installer fswatch
à l'exception des API susmentionnées utilisées par les moniteurs du système de fichiers.
fswatch
fournit la documentation suivante :
La documentation officielle fswatch
est fournie au format Texinfo. Il s'agit de la source d'informations la plus complète sur fswatch
et la seule faisant autorité. La page de manuel, en particulier, est un stub qui suggère à l'utilisateur d'utiliser la page d'informations à la place.
Si vous installez fswatch
à l'aide d'un gestionnaire de packages et que vous souhaitez que le manuel PDF soit intégré au package, veuillez envoyer une demande de fonctionnalité au responsable du package.
fswatch
est localisable et utilise en interne GNU gettext
pour découpler les chaînes localisables de leur traduction. Les paramètres régionaux actuellement disponibles sont :
en
).it
).es
). Pour créer fswatch
avec la prise en charge de la localisation, vous devez avoir installé gettext
sur votre système. Si configure
ne peut pas trouver
ou si l'éditeur de liens ne peut pas trouver libintl
, vous devrez peut-être fournir manuellement leur emplacement pour configure
, généralement en utilisant les variables CPPFLAGS
et LDFLAGS
. Voir README.macos
pour un exemple.
Si gettext
n'est pas disponible sur votre système, fswatch
sera construit correctement, mais il ne prendra pas en charge la localisation et la seule langue disponible sera l'anglais.
fswatch
accepte une liste de chemins pour lesquels les événements de modification doivent être reçus :
$ fswatch [options] ... path-0 ... path-n
Le flux d'événements est créé même si l'un des chemins n'existe pas encore. S'ils sont créés après le lancement de fswatch
, les événements de modification seront correctement reçus. En fonction de l'observateur utilisé, les chemins nouvellement créés seront surveillés une fois la latence configurée écoulée.
La sortie de fswatch
peut être redirigée vers un autre programme afin de la traiter davantage :
$ fswatch -0 path | while read -d "" event
do
// do something with ${event}
done
Pour exécuter une commande lorsqu'un ensemble d'événements de modification est imprimé sur la sortie standard mais qu'aucun détail d'événement n'est requis, la commande suivante peut être utilisée :
$ fswatch -o path | xargs -n1 -I{} program
Le comportement est cohérent avec les versions antérieures de fswatch
(v. 0.x). Veuillez lire la section Problèmes de compatibilité avec fswatch v. 0.x pour plus d'informations.
Par défaut, fswatch
choisit le meilleur moniteur disponible sur la plateforme actuelle, en termes de performances et de consommation de ressources. Si l'utilisateur souhaite spécifier un autre moniteur, l'option -m
peut être utilisée pour spécifier le moniteur par son nom :
$ fswatch -m kqueue_monitor path
La liste des moniteurs disponibles peut être obtenue avec l'option -h
.
Pour plus d'informations, reportez-vous à la documentation fswatch
.
Tout le monde est invité à contribuer à fswatch
. Veuillez consulter CONTRIBUTING
pour plus d'informations.
Les rapports de bogues peuvent être envoyés directement aux auteurs.
L'auteur peut être contacté sur IRC, en utilisant le canal Freenode #fswatch
.
Ce logiciel est sous double licence GPL v. 3.0 et Apache License v. 2.0.
Copyright (c) 2013-2021 Enrico M. Crisostomo
Ce programme est un logiciel gratuit ; vous pouvez le redistribuer et/ou le modifier selon les termes de la licence publique générale GNU telle que publiée par la Free Software Foundation ; soit la version 3, soit (à votre choix) toute version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou d’ADAPTATION À UN USAGE PARTICULIER. Consultez la licence publique générale GNU pour plus de détails.
Vous devriez avoir reçu une copie de la licence publique générale GNU avec ce programme. Sinon, consultez http://www.gnu.org/licenses/.