Je souhaite être averti lorsqu'un nom de fichier spécifique est créé. Je regarde inotify
. L' IN_CREATE
indicateur est disponible pour surveiller un répertoire pour toutes les modifications qu'il contient, mais je préfère ne pas surveiller le répertoire entier car il peut y avoir beaucoup d'activité dans ce répertoire en plus du fichier qui m'intéresse. ?
9
access
avecF_OK
pour voir s'il existe encore.Réponses:
Vous ne pouvez pas faire en sorte que le noyau vous informe uniquement d'une modification d'un certain chemin. Les raisons sont un peu subtiles:
Sous Linux, un objet fichier existe indépendamment de tout nom qu'il peut avoir. Les noms de fichiers sont en fait des attributs de leur répertoire contenant, et un seul fichier peut être appelé par plusieurs noms (voir, hardlinking).
Le noyau doit avoir quelque chose auquel attacher des objets inotify; il ne peut pas attacher un objet à un nom de chemin car un nom de chemin n'est pas un véritable objet de système de fichiers; vous devez attacher au répertoire parent ou au fichier que le chemin décrit. Mais vous ne pouvez pas attacher au fichier, car vous regardez pour voir si un fichier avec un nom donné est créé, et non des modifications apportées à un fichier donné.
Théoriquement, le noyau pourrait implémenter une API qui vous permet de sélectionner des événements pour un chemin d'accès donné lors de l'ajout d'une surveillance à un répertoire, de la même manière qu'il vous permet de sélectionner des types d'événements. Cela alourdirait l'API, et le noyau finirait par traiter les mêmes données et faire la même comparaison de chaînes que vous feriez dans l'espace utilisateur.
Y a-t-il un impact notable sur les performances en plaçant une montre sur un répertoire très actif? Je ne sais pas à quel point vous voulez dire actif; des dizaines de fichiers par seconde, des centaines, des millions?
En tout cas,
access
j'éviterais: ça va toujours être racé. Un fichier pourrait être créé et supprimé entre les appels àaccess
, et appeleraccess
dans une boucle très serrée va être lent, et c'est le genre de problème qui ainotify
été conçu pour résoudre.la source
inotify
et si les performances étaient un problème réel.