• [^] # Re: Portabilité ?

    Posté par (site web personnel) . En réponse à la dépêche Trois utilitaires : Delta, Dust et Watchexec. Évalué à 10.

    Tu as testé watchexec sous Haiku ? A priori, il utilise le même mécanisme de polling comme fallback générique que fswatch.

    Plus généralement, la portabilité pour ce genre d'outils est compliquée. Chaque OS a une API propre, avec un mode de fonctionnement légèrement différent du voisin, mais ses différences rendent vraiment compliqué d'avoir un outil générique.

    Sous GNU/Linux, c'est inotify. On dit que l'on veut surveiller tout fichier ou répertoire et l'OS va nous envoyer des événements quand il y a des appels système qui concernent le fichier ou répertoire.

    Sous macOS, c'est fsevents : par rapport à inotify, les événements pour un même fichier sont regroupés quand ils arrivent suffisamment proches. Par exemple, on peut recevoir un événement pour un fichier avec des flags « fichier créé », « fichier modifié » et « fichier déplacé » pour un fichier temporaire.

    Sous Windows, ça s'appelle ReadDirectoryChangesW, et ça marche un peu comme inotify, mais en plus, il y a l'aspect recursif qui est pris en compte : quand on demande à surveiller un répertoire, on reçoit des événements quand un fichier dans un sous-sous-sous-répertoire est modifié (alors que pour inotify, il faut explicitement parcourir les sous-répertoires et mettre en place la surveillance de ces sous-répertoires). Par contre, dans les points négatifs, c'est plus compliqué de suivre les fichiers et répertoires déplacés.

    Sous BSD, c'est kqueue. Je n'ai pas pratiqué, mais j'ai entendu dire que c'était plus efficace comme alternative pour epoll que comme alternative à inotify.

    Pour Haiku et les autres, je ne saurais même pas dire ce qui est en place.