Man page - epoll_ctl(2)

Packages contains this manual

Available languages:

en fr ja ru

Manual

epoll_ctl

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
NOTES
BOGUES
VOIR AUSSI
TRADUCTION

NOM

epoll_ctl - Interface de contrĂŽle pour un descripteur de fichier epoll

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <sys/epoll.h>

int epoll_ctl(int epfd , int op , int fd ,
struct epoll_event *_Nullable
event );

DESCRIPTION

Cet appel systĂšme est utilisĂ© pour ajouter, modifier ou supprimer des entrĂ©es dans la liste des intĂ©rĂȘts d’une instance epoll (7) Ă  laquelle se rapporte un descripteur de fichier epfd . Il nĂ©cessite que l’opĂ©ration op soit effectuĂ©e sur le descripteur de fichier cible fd .

Les valeurs autorisées pour le paramÚtre op sont :
EPOLL_CTL_ADD

Ajouter une entrĂ©e Ă  la liste d’intĂ©rĂȘts du descripteur de fichier epoll epfd . L’entrĂ©e comprend le descripteur de fichier, fd , une rĂ©fĂ©rence Ă  la description du fichier ouvert correspondant (voir epoll (7) et open (2)), et les paramĂštres indiquĂ©s dans event .

EPOLL_CTL_MOD

Passer les paramĂštres associĂ©s Ă  fd dans la liste des intĂ©rĂȘts Ă  ceux spĂ©cifiĂ©s dans event .

EPOLL_CTL_DEL

Supprimer (dĂ©senregistrer) le descripteur de fichier cible fd de la liste d’intĂ©rĂȘts. Le paramĂštre event est ignorĂ© et peut ĂȘtre NULL (mais consultez la section BOGUES ci-dessous).

Le paramĂštre event dĂ©crit l’objet liĂ© au descripteur de fichier fd . La struct epoll_event est dĂ©crite dans epoll_event (3type).

Le membre data de la structure epoll_event indique les donnĂ©es que le noyau doit enregistrer et renvoyer (Ă  l’aide de epoll_wait (2)) quand ce descripteur de fichier est prĂȘt.

Le membre events de la structure epoll_event est un masque de bits composĂ© par une opĂ©ration OU sur zĂ©ro ou plusieurs des types d’évĂ©nements renvoyĂ©s par epoll_wait (2) et les attributs d’entrĂ©e, qui modifient son comportement, mais ne sont pas renvoyĂ©s. Les types d’évĂ©nements disponibles sont :
EPOLLIN

Le fichier associé est disponible pour un appel read (2).

EPOLLOUT

Le fichier associé est disponible pour un appel write (2).

EPOLLRDHUP (depuis Linux 2.6.17)

Le correspondant sur un socket en mode flux a fermĂ© la connexion, ou bien a terminĂ© d’écrire Ă  la moitiĂ© de la connexion. (Cet attribut est particuliĂšrement utile pour Ă©crire du code simple permettant de dĂ©tecter la fermeture de la connexion par surveillance du changement d’état).

EPOLLPRI

Il existe une condition exceptionnelle sur le descripteur de fichier. Voir le point sur POLLPRI dans poll (2).

EPOLLERR

Une condition d’erreur s’est produite sur le descripteur de fichier associĂ©. Cet Ă©vĂ©nement est aussi signalĂ© pour la partie Ă©criture d’un tube (pipe) lorsque la partie lecture a Ă©tĂ© arrĂȘtĂ©e.

epoll_wait (2) signalera toujours cet Ă©vĂ©nement, il n’est pas nĂ©cessaire de l’indiquer dans events lors d’un appel epoll_ctl ().

EPOLLHUP

Un blocage s’est produit sur le descripteur de fichier associĂ©.

epoll_wait (2) signalera toujours cet Ă©vĂ©nement, il n’est pas nĂ©cessaire de l’indiquer dans events lors d’un appel Ă  epoll_ctl ().

Remarquez que lors d’une lecture Ă  partir d’un canal tel qu’un tube (pipe) ou un socket de flux, cet Ă©vĂ©nement indique simplement que le correspondant a fermĂ© sa partie de canal. Les lectures qui suivent issues du canal ne renverront 0 (fin de fichier) qu’aprĂšs que toutes les donnĂ©es restantes dans le canal aient Ă©tĂ© consommĂ©es.

Et les attributs d’entrĂ©e disponibles sont :
EPOLLET

Demande les notifications par changement d’état du descripteur de fichier associĂ©. Par dĂ©faut epoll fonctionne en dĂ©tection de niveau. Consultez epoll (7) pour plus de dĂ©tails sur les comportements en dĂ©tection de niveau et de changements d’état.

EPOLLONESHOT (depuis Linux 2.6.2)

Demande une notification en « coup unique » (Ndt : one-shot) pour le descripteur de fichier associĂ©. Cela signifie qu’aprĂšs qu’un Ă©vĂ©nement a Ă©tĂ© notifiĂ© par epoll_wait (2) pour le descripteur de fichier, celui-ci est dĂ©sactivĂ© de la liste d’intĂ©rĂȘts et aucun autre Ă©vĂ©nement ne sera rapportĂ© par l’interface epoll . L’utilisateur doit appeler epoll_ctl () avec EPOLL_CTL_MOD pour rĂ©armer le descripteur de fichier avec le nouveau masque d’évĂ©nement.

EPOLLWAKEUP (depuis Linux 3.5)

Si EPOLLONESHOT et EPOLLET sont vides et que le processus a la capacitĂ© CAP_BLOCK_SUSPEND , s’assurer que le systĂšme n’entre pas en « veille » ou « hibernation » pendant que cet Ă©vĂ©nement est en attente ou en train d’ĂȘtre traitĂ©. L’évĂ©nement est considĂ©rĂ© « traité » Ă  partir du moment oĂč il est renvoyĂ©, par un appel d’ epoll_wait (2) avant le prochain appel d’ epoll_wait (2) sur le mĂȘme descripteur de fichier epoll (7), la fermeture de ce descripteur de fichier, la suppression du descripteur de fichier de l’évĂ©nement avec EPOLL_CTL_DEL , ou le vidage de EPOLLWAKEUP pour le descripteur de fichier de l’évĂ©nement avec EPOLL_CTL_MOD . Consultez Ă©galement BOGUES .

EPOLLEXCLUSIVE (depuis Linux 4.5)

DĂ©finit un mode de rĂ©veil exclusif pour le descripteur de fichier epoll qui va ĂȘtre attachĂ© au descripteur de fichier cible, fd . Quand un Ă©vĂ©nement de rĂ©veil se produit et que plusieurs descripteurs de fichier epoll sont rattachĂ©s au mĂȘme fichier cible en utilisant EPOLLEXCLUSIVE , un ou plusieurs descripteurs de fichier epoll recevront un Ă©vĂ©nement avec epoll_wait (2). Le comportement par dĂ©faut dans ce scĂ©nario (quand EPOLLEXCLUSIVE n’est pas dĂ©fini) est que tous les descripteurs de fichier epoll reçoivent un Ă©vĂ©nement. EPOLLEXCLUSIVE est ainsi utile pour Ă©viter des problĂšmes de bousculade (thundering herd) dans certains scĂ©narii.

Si un mĂȘme descripteur de fichier est dans plusieurs instances epoll, certains ayant l’attribut EPOLLEXCLUSIVE et d’autres pas, les Ă©vĂ©nements seront fournis Ă  toutes les instances epoll qui n’ont pas indiquĂ© EPOLLEXCLUSIVE et Ă  au moins une des instances epoll oĂč EPOLLEXCLUSIVE est indiquĂ©.

Les valeurs suivantes peuvent ĂȘtre indiquĂ©es avec EPOLLEXCLUSIVE : EPOLLIN , EPOLLOUT , EPOLLWAKEUP et EPOLLET . EPOLLHUP et EPOLLERR peuvent Ă©galement ĂȘtre indiquĂ©s mais cela n’est pas nĂ©cessaire : comme d’habitude, ces Ă©vĂ©nements sont toujours signalĂ©s s’ils arrivent, qu’ils soient ou non indiquĂ©s dans events . Les tentatives d’indiquer d’autres valeurs dans events provoquent l’erreur EINVAL .

EPOLLEXCLUSIVE ne peut ĂȘtre utilisĂ© que dans une opĂ©ration EPOLL_CTL_ADD ; les tentatives de l’utiliser avec EPOLL_CTL_MOD provoquent une erreur. Si EPOLLEXCLUSIVE a Ă©tĂ© positionnĂ© en utilisant epoll_ctl (), le EPOLL_CTL_MOD consĂ©cutif sur la mĂȘme paire epfd , fd provoque une erreur. Un appel Ă  epoll_ctl () qui indique EPOLLEXCLUSIVE dans events et le descripteur de fichier cible fd en instance epoll Ă©chouera probablement. Dans tous ces cas, l’erreur est EINVAL .

VALEUR RENVOYÉE

Lorsqu’il rĂ©ussit, l’appel epoll_ctl () renvoie zĂ©ro. Si une erreur se produit, epoll_ctl () renvoie -1 et errno est positionnĂ© pour indiquer l’erreur.

ERREURS

EBADF

epfd ou fd n’est pas un descripteur de fichier valable.

EEXIST

op était EPOLL_CTL_ADD , mais le descripteur de fichier fd est déjà enregistré dans cette instance epoll.

EINVAL

Le descripteur de fichier epfd , n’est pas un descripteur epoll , ou fd et epfd sont identiques, ou l’opĂ©ration demandĂ©e op n’est pas gĂ©rĂ©e par cette interface.

EINVAL

Un type d’évĂ©nement non valable a Ă©tĂ© indiquĂ© avec EPOLLEXCLUSIVE dans events .

EINVAL

op valait EPOLL_CTL_MOD et events comprenait un EPOLLEXCLUSIVE .

EINVAL

op valait EPOLL_CTL_MOD et le drapeau EPOLLEXCLUSIVE a été appliqué précédemment à cette paire epfd , fd .

EINVAL

EPOLLEXCLUSIVE était indiqué dans event et fd se rapporte à une instance epoll.

ELOOP

fd se rapporte Ă  une instance epoll et cette opĂ©ration EPOLL_CTL_ADD crĂ©erait une boucle infinie d’instances epoll qui se surveilleraient mutuellement ou une profondeur d’arborescence d’instances epoll plus importante que 5.

ENOENT

op Ă©tait EPOLL_CTL_MOD ou EPOLL_CTL_DEL , et fd n’était pas enregistrĂ© dans cette instance epoll.

ENOMEM

Pas assez de mĂ©moire dans le noyau pour traiter l’opĂ©ration op demandĂ©e.

ENOSPC

La limite imposĂ©e par /proc/sys/fs/epoll/max_user_watches a Ă©tĂ© rencontrĂ©e en essayant d’enregistrer ( EPOLL_CTL_ADD ), un nouveau descripteur de fichier, sur une instance epoll. Consultez epoll (7) pour plus de dĂ©tails.

EPERM

Le ficher cible fd ne prend pas en charge epoll . Cette erreur peut arriver si fd renvoie, par exemple, à un fichier ou à un répertoire régulier.

STANDARDS

Linux.

HISTORIQUE

Linux 2.6, glibc 2.3.2.

NOTES

L’interface epoll prend en charge tous les descripteurs de fichier gĂ©rĂ©s par poll (2).

BOGUES

Avant Linux 2.6.9, l’opĂ©ration EPOLL_CTL_DEL nĂ©cessitait un pointeur non NULL dans event , alors que ce paramĂštre est ignorĂ©. Depuis Linux 2.6.9, event peut ĂȘtre NULL lors d’une opĂ©ration EPOLL_CTL_DEL . Les applications qui doivent ĂȘtre portables pour les noyaux antĂ©rieurs Ă  Linux 2.6.9 devraient utiliser un pointeur diffĂ©rent de NULL dans event .

Si EPOLLWAKEUP est indiquĂ© dans flags , mais que l’appelant n’a pas la capacitĂ© CAP_BLOCK_SUSPEND , alors l’attribut EPOLLWAKEUP est ignorĂ© silencieusement . Ce comportement malheureux est nĂ©cessaire parce qu’aucune vĂ©rification de validitĂ© n’était rĂ©alisĂ©e sur l’argument flags dans l’implĂ©mentation d’origine, et l’ajout du EPOLLWAKEUP avec une vĂ©rification forçant l’échec de l’appel si l’appelant n’avait pas la capacitĂ© CAP_BLOCK_SUSPEND cassait au moins une application en espace utilisateur qui indiquait alĂ©atoirement (et inutilement) ce bit. Une application robuste devrait donc vĂ©rifier Ă  deux fois d’avoir la capacitĂ© CAP_BLOCK_SUSPEND avant d’essayer d’utiliser l’attribut EPOLLWAKEUP .

VOIR AUSSI

epoll_create (2), epoll_wait (2), ioctl_eventpoll (2), poll (2), epoll (7)

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 .