Scroll to navigation

FANOTIFY_INIT(2) Manuel du programmeur Linux FANOTIFY_INIT(2)

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.

The file descriptor is used in calls to fanotify_mark(2) to specify the files, directories, mounts or filesystems for which fanotify events shall be created. These events are received by reading from the file descriptor. Some events are only informative, indicating that a file has been accessed. Other events can be used to determine whether another application is permitted to access a file or directory. Permission to access filesystem objects is granted by writing to the file descriptor.

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 écoutant 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 (since Linux 4.20)
Report thread ID (TID) instead of process ID (PID) in the pid field of the struct fanotify_event_metadata supplied to read(2) (see fanotify(7)).
FAN_REPORT_FID (since Linux 5.1)
This value allows the receipt of events which contain additional information about the underlying filesystem object correlated to an event. An additional structure encapsulates the information about the object and is included alongside the generic event metadata structure. The file descriptor that is used to represent the object correlated to an event is instead substituted with a file handle. It is intended for applications that may find the use of a file handle to identify an object more suitable than a file descriptor. Additionally, it may be used for applications that are interested in directory entry events, such as FAN_CREATE, FAN_ATTRIB, FAN_MOVE, and FAN_DELETE for example. Note that the use of directory modification events are not supported when monitoring a mount point. The use of FAN_CLASS_CONTENT or FAN_CLASS_PRE_CONTENT is not permitted with this flag and will result in the error EINVAL. See fanotify(7) for additional information.

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 suivants sont aussi permis : 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
An invalid value was passed in flags or event_f_flags. FAN_ALL_INIT_FLAGS (deprecated since Linux kernel version 4.20) defines all allowable bits for 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 attribut 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.07 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> et David Prévot <david@tilapin.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>.

9 juin 2020 Linux