inotify est un mécanisme dunoyau Linux qui fournit des notifications concernant lesystème de fichiers.
Il a été écrit parJohn McCutchan avec l'aide deRobert M. Love (en) et plus tard parAmy Griffis pour remplacerdnotify. Il a été inclus dans la branche principale du noyau linux à partir de la version 2.6.13 (), et pouvait déjà être compilé dans 2.6.12 et peut être même plus tôt grâce à l'utilisation de patch. Il est essentiellement une extension du système de fichiers qui rend compte à une application de tout changement dans le système de fichiers.
On le trouve dans des systèmes d'indexation de fichiers commeBeagle, où ses fonctionnalités permettent uneré-indexation des fichiers modifiés, sans qu'il soit besoin de regarder la totalité du système de fichiers à intervalles réguliers pour cela, ce qui serait très inefficace. En étant averti qu'un fichier a été modifié directement par le noyau, plutôt que d'avoir à regarder (attente active), Beagle et autres logiciels du même type peuvent réaliser la ré-indexation très rapidement, en nuisant peu aux performances du système (inotify permet donc l'usage de tels programmes sans que ce soit déraisonnable).
Il peut aussi être utilisé pour actualiser automatiquement des 'vues' d'un répertoire, recharger desfichiers de configuration, etc.
Inotify a beaucoup d'avantages par rapport à dnotify, le module qu'il remplace. Avec l'ancien module, un programme devait utiliser undescripteur de fichier pour chaque répertoire qu'il voulait surveiller. Cela pouvait devenir ungoulot d'étranglement parce que le nombre de descripteurs de fichiers maximum pour un processus pouvait être atteint.
L'utilisation des descripteurs de fichiers dans dnotify s'est aussi avérée être un problème avec l'usage des périphériques de stockage amovibles. Les périphériques ne pouvaient pas être 'démontés' parce qu'il y avait encore des descripteurs de fichiers pointant sur eux.
Inotify est utilisévia une série d'appels système spécifiquement créés pour lui.
#include<sys/inotify.h>
Incluez cet en-tête de fichier pour utiliser inotify.
intinotify_init(void)
Cela crée une instance d'inotify.inotify_init retourne un descripteur de fichier par lequel sont lus tous les évènements. Utilisez l'appel read() pour recevoir les évènements. Afin d'éviter une attente active, read() bloque jusqu'à ce qu'un évènement survienne.
intinotify_add_watch(intfd,constchar*chemin,intmasque)
Démarre la surveillance de l'inode pointée par le chemin pour les évènements contenus dans le masque. Retourne un descripteur de surveillance (watch descriptor) qui est unique (au sein de cette instance inotify) sur l'inode pointée par le chemin. NOTE: De multiples chemins peuvent pointer vers le même inode/descripteur de surveillance.
intinotify_rm_watch(intfd,intwd)
Supprime la surveillance de l'objet désigné par le descripteur de surveillancewd.
Les événements générés par inotify contiennent les informations suivantes :
| attribut | Contenus |
|---|---|
| wd | descripteur de surveillance |
| mask | événement. |
| cookie | exclusivement utilisé lors d'un renommage. Renommer un objet du système de fichiers génère deux évènements, «renommé depuis»IN_MOVED_FROM et «renommé vers»IN_MOVED_TO. Cette valeur arbitraire est la même pour un objet donné et permet à l'application de faire le lien entre les deux évènements concernant un même objet. |
| len | longueur de l'attributname |
| name | le nom de fichier (optionnel) associé à cet événement (local au répertoire parent) |
Voici quelques-uns des événements qui peuvent être surveillés :
| Histoire | ||
|---|---|---|
| Noyau Linux | ||
| Distributions | ||
| Applications | ||
| Personnalités liées | ||
| Médias | ||
| Mobile | ||
| Autres sujets | ||