Provided by: manpages-fr-dev_4.13-4_all 

NOM
fanotify_init - Créer et initialiser un groupe fanotify
SYNOPSIS
#include <fcntl.h>
#include <sys/fanotify.h>
int fanotify_init(unsigned int flags, unsigned int event_f_flags);
DESCRIPTION
Pour un aperçu de l’interface de programmation fanotify, consultez fanotify(7).
fanotify_init() initialise un nouveau groupe fanotify et renvoie un descripteur de fichier pour la file
d’événements associée au groupe.
Le descripteur de fichier est utilisé dans les appels de fanotify_mark(2) pour indiquer les fichiers, les
répertoires, les points de montage et les systèmes de fichiers pour lesquels les événements fanotify
seront créés. Ces événements sont reçus en lisant le descripteur de fichier. Certains événements ne sont
qu’informatifs, indiquant qu’il y a eu un accès au fichier. D’autres événements peuvent être utilisés
pour déterminer si une autre application a le droit d’accéder à un fichier ou répertoire. Le droit
d’accéder aux objets de système de fichiers est accordé en écrivant dans le descripteur de fichier.
Plusieurs programmes peuvent utiliser l’interface fanotify en même temps pour surveiller les mêmes
fichiers.
Dans l’implémentation actuelle, le nombre de groupes fanotify par utilisateur est limité à 128. Cette
limite ne peut pas être écrasée.
Appeler fanotify_init() nécessite la capacité CAP_SYS_ADMIN. Cette contrainte pourrait être levée dans
les prochaines versions de l’interface de programmation. Par conséquent, certaines vérifications
supplémentaires de capacité ont été mises en place comme indiqué ci-dessous.
L’argument flags contient un champ multibit définissant la classe de notification de l’application
écoutant et d’autres champs monobits indiquant le comportement du descripteur de fichier.
Si plusieurs écoutants d’événements de permission existent, la classe de notification est utilisée pour
établir l’ordre dans lequel les écoutants reçoivent les événements.
Une seule des classes de notification suivantes peut être indiquée dans flags.
FAN_CLASS_PRE_CONTENT
Cette valeur permet de recevoir des événements notifiant qu’un fichier a été accédé et les
événements de décisions de permission si un fichier peut être accédé. Elle est conçue pour les
écoutants d’événement qui doivent accéder aux fichiers avant qu’ils ne contiennent leurs données
finales. Cette classe de notification pourrait être utilisée par exemple par des gestionnaires de
stockage hiérarchisé.
FAN_CLASS_CONTENT
Cette valeur permet de recevoir des événements notifiant qu’un fichier a été accédé et les
événements de décisions de permission si un fichier peut être accédé. Elle est conçue pour les
écoutants d’événement qui doivent accéder aux fichiers quand ils contiennent déjà leur contenu
final. Cette classe de notification pourrait être utilisée par exemple par des programmes de
détection de logiciels malveillants.
FAN_CLASS_NOTIF
C’est la valeur par défaut. Elle n’a pas besoin d’être indiquée. Cette valeur ne permet de
recevoir que des événements notifiant qu’un fichier a été accédé. Les décisions de permission
avant que le fichier ne soit accédé ne sont pas possibles.
Les écoutants avec différentes classes de notification recevront les événements dans l’ordre
FAN_CLASS_PRE_CONTENT, FAN_CLASS_CONTENT, FAN_CLASS_NOTIF. L’ordre de notification pour les écoutants
dans la même classe de notification n’est pas défini.
Les bits suivants peuvent de plus être définis dans flags.
FAN_CLOEXEC
Placer l'attribut « close-on-exec » (FD_CLOEXEC) sur le nouveau descripteur de fichier. Consultez
la description de l'attribut O_CLOEXEC dans open(2).
FAN_NONBLOCK
Activer l’attribut non bloquant (O_NONBLOCK) pour le descripteur de fichier. La lecture du
descripteur de fichier ne bloquera pas. À la place, si aucune donnée n’est disponible, read(2)
échouera avec l’erreur EAGAIN.
FAN_UNLIMITED_QUEUE
Supprimer la limite de 16384 événements pour la file d’événements. L’utilisation de cet attribut
nécessite la capacité CAP_SYS_ADMIN.
FAN_UNLIMITED_MARKS
Supprimer la limite de 8192 marques. L’utilisation de cet attribut nécessite la capacité
CAP_SYS_ADMIN.
FAN_REPORT_TID (depuis Linux 4.20)
Signaler l'ID d'un thread (TID) au lieu de l'ID du processus (PID) dans le champ pid de la struct
fanotify_event_metadata fournie à read(2) (voir fanotify(7)).
FAN_REPORT_FID (depuis Linux 5.1)
Cette valeur permet la réception d'événements qui contiennent des informations complémentaires sur
l'objet du système de fichiers sous-jacent corrélé à un événement. Un enregistrement
supplémentaire de type FAN_EVENT_INFO_TYPE_FID enferme les informations sur l'objet et est inclus
dans toute la structure générique des métadonnées de l'événement. Le descripteur de fichier
utilisé pour représenter l'objet lié à un événement est remplacé par un identificateur de fichier.
Il est conçu pour les applications qui trouvent que l'utilisation d'un identificateur de fichier
pour identifier un objet convient mieux qu'un descripteur de fichier. De plus, il peut être
utilisé par des applications supervisant un répertoire ou un système de fichiers qui s'intéressent
aux modifications d'entrée de répertoire, tels que FAN_CREATE, FAN_DELETE et FAN_MOVE, ou à des
événements tels que FAN_ATTRIB, FAN_DELETE_SELF et FAN_MOVE_SELF. Tous les événements ci-dessus
exigent un groupe fanotify identifiant les objets du système de fichiers par des identificateurs
de fichier. Remarquez que pour que les événements de modification de l'entrée d'un répertoire,
l’identificateur de fichier signalé identifie le répertoire modifié et non l'objet enfant
créé/supprimé/déplacé. L'utilisation de FAN_CLASS_CONTENT ou de FAN_CLASS_PRE_CONTENT n'est pas
autorisée avec cet attribut et donnera une erreur EINVAL. Voir fanotify(7) pour des informations
supplémentaires.
FAN_REPORT_DIR_FID (depuis Linux 5.9)
Les événements des groupes fanotify initialisés avec cet attribut contiendront (voir les
exceptions ci-dessous) des informations supplémentaires sur l'objet d'un répertoire corrélé à un
événement. Un enregistrement supplémentaire de type FAN_EVENT_INFO_TYPE_DFID enferme les
informations sur l'objet répertoire et est inclus dans toute la structure générique des
métadonnées de l'événement. Pour des événements qui arrivent sur un objet qui n'est pas un
répertoire, la structure supplémentaire inclut un identificateur de fichier qui identifie l'objet
système de fichiers du répertoire parent. Remarquez qu'il n'y a pas de garantie que l'objet
système de fichiers du répertoire ne se trouve à l'emplacement décrit par l’information
d’identificateur de fichier au moment où l'événement est reçu. S'il est associé à l'attribut
FAN_REPORT_FID, il se peut que deux événements soient signalés avec ceux qui se produisent sur un
objet non répertoire, un pour identifier l'objet non répertoire lui-même, et un pour identifier le
répertoire parent. Remarquez que dans certains cas, un objet système de fichiers n'a pas de
parent, par exemple quand un événement se produit sur un fichier non lié mais ouvert. Dans ce cas,
avec l'attribut FAN_REPORT_FID l'événement sera signalé avec un seul enregistrement pour
identifier l'objet non répertoire, puisqu'il n'y a pas de répertoire associé à l'événement. Sans
l'attribut FAN_REPORT_FID, aucun événement ne sera signalé. Voir fanotify(7) pour des détails
supplémentaires.
FAN_REPORT_NAME (depuis Linux 5.9)
Les événements des groupes fanotify initialisés avec cet attribut contiendront des informations
supplémentaires sur le nom de l'entrée de répertoire corrélé à un événement. Cet attribut doit
être fourni en association avec l'attribut FAN_REPORT_DIR_FID. Le fait de fournir cette valeur
d'attribut sans FAN_REPORT_DIR_FID aboutira à l'erreur EINVAL. Cet attribut peut être combiné à
l'attribut FAN_REPORT_FID. Un enregistrement supplémentaire de type FAN_EVENT_INFO_TYPE_DFID_NAME,
qui enferme les informations sur l'entrée de répertoire, est inclus dans toute la structure
générique des métadonnées de l'événement et remplace l'enregistrement des informations
supplémentaires de type FAN_EVENT_INFO_TYPE_DFID. L'enregistrement supplémentaire inclut un
identificateur de fichier qui identifie un objet système de fichiers de répertoire suivi d'un nom
qui identifie une entrée dans ce répertoire. Pour que les événements de modification de l'entrée
d'un répertoire FAN_CREATE, FAN_DELETE et FAN_MOVE, le nom signalé est celui de l'entrée de
répertoire créée/effacée/déplacée. Pour les autres événements qui se produisent sur un objet
répertoire, l’identificateur rapporté est celui est celui de l'objet répertoire lui-même et le nom
signalé est « . ». Pour les autres événements qui se produisent sur un objet non répertoire,
l’identificateur de fichier signalé est celui de l'objet du répertoire parent et le nom signalé
est celui de l'entrée d'un répertoire où se situait l'objet au moment de l'événement. La raison
derrière cette logique est que l’identificateur de fichier du répertoire signalé peut être passé à
open_by_handle_at(2) pour récupérer un descripteur de fichier de répertoire ouvert et que ce
descripteur de fichier ainsi que le nom signalé puissent être utilisés pour appeler fstatat(2). La
même règle qui s'applique au type d'enregistrement FAN_EVENT_INFO_TYPE_DFID s'applique aussi au
type d'enregistrement FAN_EVENT_INFO_TYPE_DFID_NAME : si un objet non répertoire n'a pas de
parent, soit l'événement ne sera pas signalé, soit il le sera sans les informations d'entrée de
répertoire. Remarquez qu'il n'existe pas de garantie que l'objet système de fichiers se trouve à
l'endroit décrit par les informations de l'entrée de répertoire au moment où l'événement est reçu.
Voir fanotify(7) pour des détails supplémentaires.
FAN_REPORT_DFID_NAME
C'est un synonyme de (FAN_REPORT_DIR_FID|FAN_REPORT_NAME).
L’argument event_f_flags définit les attributs d’état de fichier qui seront définis sur les descriptions
de fichiers ouverts qui sont créées pour les événements fanotify. Pour plus de précisions sur ces
attributs, consultez la description des valeurs de flags dans open. event_f_flags contient un champ
multibit pour le mode d’accès. Ce champ peut prendre une des valeurs suivantes :
O_RDONLY
Cette valeur permet l’accès en lecture seule.
O_WRONLY
Cette valeur permet l’accès en écriture seule.
O_RDWR Cette valeur permet l’accès en lecture et écriture.
Des bits supplémentaires peuvent être définis dans event_f_flags. Les valeurs les plus utiles sont les
suivantes :
O_LARGEFILE
Activer la prise en charge de fichiers dépassant 2 Go. Sans cet attribut, une erreur EOVERFLOW
surviendra lors d’une tentative d’ouverture d’un gros fichier surveillé par un groupe fanotify sur
un système 32 bits.
O_CLOEXEC (depuis Linux 3.18)
Activer l'attribut « close-on-exec » pour le descripteur de fichier. Consultez la description de
l'attribut O_CLOEXEC dans open(2) pour savoir pourquoi cela peut être utile.
Les valeurs suivantes sont aussi permises : O_APPEND, O_DSYNC, O_NOATIME, O_NONBLOCK et O_SYNC. Indiquer
n’importe quel autre attribut dans event_f_flags provoque l’erreur EINVAL (mais consultez BOGUES).
VALEUR RENVOYÉE
S'il réussit, fanotify_init() renvoie un nouveau descripteur de fichier. En cas d'erreur, il renvoie -1
et errno contient le code d'erreur.
ERREURS
EINVAL Une valeur incorrecte a été passée dans flags ou event_f_flags. FAN_ALL_INIT_FLAGS (obsolète
depuis la version 4.20 du noyau Linux) définit tous les bits permis pour flags.
EMFILE Le nombre de groupes fanotify pour cet utilisateur dépasse 128.
EMFILE La limite du nombre de descripteurs de fichiers par processus a été atteinte.
ENOMEM Échec d’allocation mémoire pour le groupe de notification.
ENOSYS Ce noyau n’implémente pas fanotify_init(). L’interface de programmation fanotify n'est disponible
que si le noyau a été configuré avec CONFIG_FANOTIFY.
EPERM L’opération n’est pas permise car l’appelant n’a pas la capacité CAP_SYS_ADMIN.
VERSIONS
fanotify_init() a été introduit dans la version 2.6.36 du noyau Linux et activé dans la version 2.6.37.
CONFORMITÉ
Cet appel système est spécifique à Linux.
BOGUES
Le bogue suivant était présent dans les noyaux Linux avant la version 3.18 :
– O_CLOEXEC est ignoré lorsqu'il est passé dans event_f_flags.
Le bogue suivant était présent dans les noyaux Linux avant la version 3.14 :
– l’argument event_f_flags n’est pas vérifié pour les attributs incorrects. Les attributs qui ne sont
conçus que pour une utilisation interne, comme FMODE_EXEC, peuvent être définis et seront donc définis
pour les descripteurs de fichier renvoyés lors de la lecture depuis le descripteur de fichier
fanotify.
VOIR AUSSI
fanotify_mark(2), fanotify(7)
COLOPHON
Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à
l'adresse https://www.kernel.org/doc/man-pages/.
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess
<https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud
<tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard
<fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau
<jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François
<nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard
<simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot
<david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License
version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à
debian-l10n-french@lists.debian.org.
Linux 1 novembre 2020 FANOTIFY_INIT(2)