Linux |
CentOS 5.3 |
|
inotify(7) |
inotify − Surveillance d’événements sur le système de fichier. |
L’API inotify fournit un mécanisme pour la surveillance d’événements sur le système de fichiers. Inotify peut être utilisé pour surveiller des fichiers individuels ou pour surveiller des répertoires. Lorsqu’un répertoire est surveillé, inotify renverra les événements du répertoire lui-même et des fichiers qu’il contient. Les appels système suivants sont utilisés avec cette API : inotify_init(), inotify_add_watch(), inotify_rm_watch(), read() et close(). inotify_init(2) crée une instance inotify et renvoie un descripteur de fichier faisant référence à une instance inotify. inotify_add_watch(2) manipule une « liste de surveillance » associée à une instance inotify. Chaque élément (« surveillant ») de la liste de surveillance spécifie le nom du chemin d’un fichier ou d’un répertoire, avec un ensemble d’événements que le noyau doit surveiller pour le fichier référencé par ce nom de chemin. inotify_add_watch() peut soit créer un nouvel élément surveillant, soit modifier un élément existant. Chaque surveillant a un « descripteur de surveillant » unique, un entier renvoyé par inotify_add_watch() lorsque le surveillant est créé. inotify_rm_watch(2) supprime un élément d’une liste de surveillance inotify. Lorsque tous les descripteurs de fichier référençant une instance inotify ont été fermés, l’objet sous-jacent et ses ressources sont libérés afin de pouvoir être réutilisés par le noyau ; tous les surveillants associés sont automatiquement libérés. Pour déterminer quels événements sont survenus, une application lit (read(2)) le descripteur de fichier. Si aucun événement n’est survenu, en supposant que l’on ait un descripteur de fichier bloquant, une lecture (read(2)) bloquera jusqu’à ce qu’au moins un événement survienne. Chaque lecture réussie renvoie un tampon contenant une ou plusieurs structures comme la suivante : |
struct inotify_event { int wd; /* Descripteur de surveillant */ uint32_t mask; /* Masque d’événement */ uint32_t cookie; /* Cookie unique associant des événements en relation (pour rename(2)) */ uint32_t len; /* Taille du champ ’name’ */ char name[]; /* Nom optionnel terminé par un octet nul */ }; |
wd identifie le surveillant pour lequel survient cet événement. C’est l’un des descripteurs de surveillant renvoyés par un précédent appel à inotify_add_watch(). mask contient des bits qui décrivent l’événement qui est survenu (voir plus loin). cookie est un entier unique qui connecte les événements en relation. Actuellement, il n’est utilisé que pour renommer les événements permettant à la paire résultante des événements IN_MOVE_FROM et IN_MOVE_TO d’être connectée par l’application. Le champ name n’est présent que lorsqu’un événement est renvoyé pour un fichier appartenant au répertoire surveillé ; il identifie le chemin relatif du fichier dans le répertoire surveillé. Le nom du chemin est terminé avec un octet nul et peut inclure d’autres octets nuls pour aligner les lectures ultérieures sur une frontière d’adresse convenable. Le champ len totalise tous les octets de name, y compris les octets nuls ; la longueur de chaque structure inotify_event est donc sizeof(inotify_event)+len. |
Ãvénements inotify |
L’argument mask de inotify_add_watch(2) et le champ mask de la structure inotify_event renvoyée lors de la lecture (read(2)) d’un descripteur de fichier inotify sont tous les deux des masques de bits qui identifient les événements inotify. Les bits suivants peuvent être spécifiés dans mask lors d’un appel à inotify_add_watch() et être renvoyés dans le champ mask lors d’un appel à read() : |
|
|