Provided by:
manpages-fr_3.32d0.2p4-1_all 
NOM
inotify - Controler les evenements des systemes de fichiers
DESCRIPTION
L'API inotify fournit un mecanisme pour controler les evenements au
niveau des systemes de fichiers. Inotify peut etre utilise pour
controler des fichiers individuels ou des repertoires. Quand un
repertoire est controle, inotify va signaler des evenements pour le
repertoire lui-meme et pour les fichiers de ce repertoire.
Les appels systeme suivants sont utilises avec cette API :
inotify_init(2) (ou inotify_init1(2)), inotify_add_watch(2),
inotify_rm_watch(2), read(2) et close(2).
inotify_init(2) cree une instance inotify et renvoie un descripteur de
fichier se referant a cette instance inotify. L'appel systeme plus
recent inotify_init1(2) est comme inotify_init(2), mais fournit des
fonctionnalites supplementaires.
inotify_add_watch(2) manipule la << liste de surveillance >> associee a
une instance inotify. Chaque element (<< watch >>) de la liste de
surveillance specifie le chemin d'un fichier ou d'un repertoire, avec
un ensemble d'evenements que le noyau doit controler pour le fichier
indique par ce chemin. inotify_add_watch(2) cree un nouvel element de
surveillance ou modifie un element existant. Chaque element a un unique
<< descripteur de surveillance >>, un entier renvoye par
inotify_add_watch(2) lorsque cet element est cree.
inotify_rm_watch(2) retire un element d'une liste de surveillance
inotify.
Quand tous les descripteurs de fichier se referant a une instance
inotify ont ete fermes, l'objet sous-jacent et ses ressources sont
liberes pour etre reutilises par le noyau ; tous les elements de
surveillance associes sont automatiquement liberes.
Pour determiner quels evenements ont eu lieu, une application va lire
avec read(2) le descripteur de fichier inotify. Si aucun evenement n'a
eu lieu, alors, en supposant qu'il s'agisse d'un descripteur de fichier
bloquant, read(2) se bloquera jusqu'a ce qu'au moins un evenement ait
lieu (a moins qu'elle ne soit interrompue par un signal, auquel cas
l'appel echouera avec l'erreur EINTR ; consultez signal(7)).
Chaque lecture (avec read(2)) reussie renvoie un tampon contenant une
ou plusieurs des structures suivantes :
struct inotify_event {
int wd; /* Descripteur d'element de surveillance */
uint32_t mask; /* Masque d'evenements */
uint32_t cookie; /* Cookie unique d'association des
evenements (pour rename(2)) */
uint32_t len; /* Taille du champ name */
char name[]; /* Nom optionnel termine par un nul */
};
wd identifie l'element de surveillance pour lequel cet evenement a
lieu. Il s'agit de l'un des descripteurs de fichier renvoyes par un
precedent appel a inotify_add_watch(2).
mask contient des bits qui decrivent l'evenement qui a eu lieu (voir
ci-dessous).
cookie est un entier unique qui relie les evenements. Ce n'est
actuellement utilise que pour les evenements de renommage, et permet a
la paire d'evenements IN_MOVE_FROM et IN_MOVE_TO en resultant d'etre
associes par l'application.
Le champ name n'est present que lorsqu'un evenement est renvoye pour un
fichier au sein d'un repertoire surveille. Il identifie le chemin du
fichier par rapport au repertoire surveille. Ce chemin est termine par
un caractere nul et peut inclure d'autres octets nuls pour ajuster des
lectures successives a une limite d'adressage convenable.
Le champ len compte tous les octets de name, incluant les caracteres
nuls. La longueur de chaque structure inotify_event vaut donc
sizeof(inotify_event)+len.
Le comportement lorsque le tampon donne a read(2) est trop petit pour
renvoyer l'information sur le prochain evenement depend de la version
du noyau : avant 2.6.21, read(2) renvoie 0 ; depuis le noyau 2.6.21,
read(2) echoue avec l'erreur EINVAL.
'Ev'enements inotify
L'argument mask passe a inotify_add_watch(2) et le champ mask de la
structure inotify_event renvoyes lors de la lecture avec read(2) d'un
descripteur de fichier inotify sont tous deux des bits de masquage
identifiant les evenements inotify. Les bits suivants peuvent etre
definis dans l'argument mask lors de l'appel a inotify_add_watch(2) et
peuvent etre renvoyes via le champ mask retourne par read(2) :
IN_ACCESS Acces au fichier (lecture) (*).
IN_ATTRIB Modification des metadonnees, par exemple, les
permissions, les horodatages, les attributs
etendus, le compteur de liens (depuis
Linux 2.6.25), UID, GID, etc. (*).
IN_CLOSE_WRITE Fichier ouvert en ecriture ferme (*).
IN_CLOSE_NOWRITE Fichier non ouvert en ecriture ferme (*).
IN_CREATE Fichier/rep. cree dans le repertoire surveille
(*).
IN_DELETE Fichier/repertoire supprime dans le repertoire
surveille (*).
IN_DELETE_SELF Fichier/repertoire surveille supprime.
IN_MODIFY Fichier modifie (*).
IN_MOVE_SELF Fichier/repertoire surveille deplace.
IN_MOVED_FROM Fichier deplace hors du repertoire surveille (*).
IN_MOVED_TO Fichier deplace dans le repertoire surveille (*).
IN_OPEN Fichier ouvert (*).
Lors de la surveillance d'un repertoire, les evenements marques par un
asterisque (*) ci-dessus peuvent avoir lieu pour des fichiers du
repertoire, auquel cas le champ name dans la structure inotify_event
renvoyee identifie le nom du fichier dans ce repertoire.
La macro IN_ALL_EVENTS est definie comme un bit de masquage de tous les
evenements decrits ci-dessus. Cette macro peut etre utilisee comme
l'argument mask lors de l'appel a inotify_add_watch(2).
Deux macros supplementaires sont disponibles : IN_MOVE, equivalent a
IN_MOVED_FROM|IN_MOVED_TO, et IN_CLOSE, equivalent a
IN_CLOSE_WRITE|IN_CLOSE_NOWRITE.
Les bits supplementaires suivants peuvent etre indiques dans l'argument
mask lors de l'appel a inotify_add_watch(2) :
IN_DONT_FOLLOW (depuis Linux 2.6.15)
Ne pas dereferencer pathname s'il s'agit d'un
lien symbolique.
IN_EXCL_UNLINK (depuis Linux 2.6.36)
Par defaut, lors de la surveillance d'evenements
sur les entrees d'un repertoire, des evenements
sont crees pour ces entrees meme apres leur
suppression du repertoire. De nombreux evenements
ininteressants pour certaines applications
peuvent ainsi etre crees (par exemple, lors de la
surveillance de /tmp, ou de nombreuses
applications creent des fichiers temporaires donc
les noms sont immediatement supprimes). Indiquer
IN_EXCL_UNLINK modifie le comportement par
defaut, de telle sorte qu'aucun evenement n'est
cree pour ces entrees apres leur suppression du
repertoire surveille.
IN_MASK_ADD Ajouter les evenements au masque de surveillance
de ce fichier s'il existe deja (au lieu de
remplacer le masque).
IN_ONESHOT Surveiller pathname jusqu'au premier evenement,
puis le supprimer de la liste de surveillance
IN_ONLYDIR (depuis Linux 2.6.15)
Ne surveiller pathname que si c'est un
repertoire.
Les bits suivants peuvent avoir ete definis dans le champ mask renvoye
par read(2) :
IN_IGNORED Le surveillant a ete retire explicitement
(inotify_rm_watch(2)) ou automatiquement (le
fichier a ete efface, ou le systeme de fichiers a
ete demonte)
IN_ISDIR Le sujet de cet evenement est un repertoire.
IN_Q_OVERFLOW Queue des evenements surchargee (wd vaut alors
-1).
IN_UNMOUNT Le systeme de fichiers contenant l'objet
surveille a ete demonte.
Interfaces /proc
Les interfaces suivantes peuvent etre utilisees pour limiter la
quantite de memoire du noyau utilisee par inotify :
/proc/sys/fs/inotify/max_queued_events
La valeur dans ce fichier est utilisee lorsqu'une application
appelle inotify_init(2) pour definir la limite maximale du
nombre des evenements qui peuvent entrer dans la file d'attente
de l'instance inotify correspondante. Les evenements au-dela de
cette limite sont annules, mais un evenement IN_Q_OVERFLOW est
systematiquement genere.
/proc/sys/fs/inotify/max_user_instances
Cela specifie la limite maximale du nombre d'instances inotify
qui peuvent etre creees par identifiant utilisateur reel.
/proc/sys/fs/inotify/max_user_watches
Cela specifie la limite maximale du nombre de << watches >> qui
peuvent etre creees par identifiant utilisateur reel.
VERSIONS
Inotify a ete inclus dans le noyau Linux 2.6.13. Les interfaces
bibliotheque necessaires ont ete ajoutees a glibc dans la version 2.4
(IN_DONT_FOLLOW, IN_MASK_ADD et IN_ONLYDIR ont ete ajoutees dans la
version 2.5).
CONFORMIT'E
L'API inotify est specifique Linux.
NOTES
Les descripteurs de fichier inotify peuvent etre controles en utilisant
select(2), poll(2) et epoll(7). Lorsqu'un evenement est disponible, le
descripteur de fichier indique qu'il est accessible en lecture.
Depuis Linux 2.6.25, il est possible d'etre notifie par des signaux
pour des entrees-sorties des descripteurs de fichier inotify ;
consultez la discussion de F_SETFL (pour la configuration de l'attribut
O_ASYNC), F_SETOWN, et F_SETSIG dans fcntl(2). La structure siginfo_t
(decrite dans sigaction(2)) qui est passee au gestionnaire de signal a
les champs suivants definis : si_fd est defini avec le numero de
descripteur de fichiers inotify ; si_signo est defini avec le numero du
signal ; si_code est defini avec POLL_IN ; et si_band est defini avec
POLLIN.
Si deux evenements inotify de sortie successifs produits sur le
descripteur de fichier inotify sont identiques (wd, mask, cookie, et
name identiques), alors ils sont fusionnes en un seul evenement si
l'evenement le plus ancien n'a toujours pas ete lu (mais consultez la
section BOGUES).
Les evenements renvoyes lors de la lecture d'un descripteur de fichier
inotify forment une file ordonnee. Ainsi, par exemple, il est garanti
que lors du renommage d'un repertoire, les evenements seront produits
dans l'ordre convenable sur le descripteur de fichier inotify.
L'ioctl(2) FIONREAD renvoie le nombre d'octets disponibles pour la
lecture d'un descripteur de fichier inotify.
Limites et r'eserves
La surveillance inotify des repertoires n'est pas recursive : pour
surveiller les sous-repertoires, des elements de surveillance
supplementaires doivent etre crees. Cela peut etre assez long pour les
repertoires contenant une grande arborescence.
L'interface inotify ne fournit aucune information sur l'utilisateur ou
le processus qui a declenche l'evenement inotify.
Veuillez noter que la file d'evenements peut deborder. Dans ce cas, des
evenements sont perdus. Les applications robustes doivent gerer
correctement la possibilite de perdre des evenements.
L'interface inotify identifie les fichiers affectes par leur nom.
Cependant, au moment ou l'application traite un evenement inotify, ce
nom de fichier peut avoir deja ete supprime ou renomme.
Si on supervise un repertoire dans son integralite, et si un nouveau
sous-repertoire est cree dans ce repertoire, faites bien attention
qu'au moment ou vous creez un element de surveillance sur le nouveau
sous-repertoire, de nouveaux fichiers peuvent avoir deja ete crees dans
le sous-repertoire. Ainsi, vous devriez analyser le contenu du
sous-repertoire immediatement apres avoir ajoute l'element de
surveillance.
BOGUES
Dans les noyaux anterieurs a 2.6.16, l'attribut IN_ONESHOT de mask ne
fonctionne pas.
Avant le noyau 2.6.25, le code du noyau qui etait sense regrouper deux
evenements successifs (c'est-a-dire que les deux evenements les plus
recents pouvaient etre fusionnes si le plus ancien des deux n'avait
toujours pas ete lu) verifiait a la place si l'evenement le plus recent
pouvait etre fusionne a l'evenement non lu le plus ancien.
VOIR AUSSI
inotify_add_watch(2), inotify_init(2), inotify_init1(2),
inotify_rm_watch(2), read(2), stat(2),
Documentation/filesystems/inotify.txt.
COLOPHON
Cette page fait partie de la publication 3.32 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.