L'entité Epoll, un modèle d'information en noyau qui peut être considéré à partir de l'espace utilisateur comme un emballage pour deux ensembles, sert l'idée fondamentale de l'API Epoll. Dans ce guide, nous discuterons de l'utilisation de la fonction Epoll dans la langue C.
Les fonctions système suivantes sont disponibles pour construire et administrer un objet EPOLL:
Déclenché au niveau et déclenché par le bord
Les comportements déclenchés par le bord (ET) et le niveau (LT) sont tous deux possibles pour l'interface de circulation incidente Epoll (LT). Les différences des deux méthodes peuvent être résumées comme suit. Supposons que ce suivant se transforme:
La demande à EPOLL_WAIT (2) faite à l'étape 5 se décrochera probablement si la poignée du document RFD a été affectée au protocole Epoll avec le signal EpoLet (déclenché par le bord). En attendant, le partenaire distant pourrait anticiper une réaction en fonction du contenu qu'il a déjà fourni. En effet, l'option déclenchée par le bord n'envoie des signaux.
Par conséquent, la fonction de l'appelant peut même devoir être mise en attente pour une certaine information qui est déjà dans le cache de tampon dans la phase 5. Dans l'exemple susmentionné, l'écriture en 2 peut déclencher une activité à créer sur le RFD, et l'incident sera reçu dans 3. L'appel à Epoll_Wait (2) à l'étape 5 peut se retrouver coincé parce que l'activité de lecture à l'étape 4 n'a pas utilisé toutes les informations de tampon.
Pour empêcher une lecture ou une écriture de call. Ce qui suit est une procédure recommandée pour l'utilisation de l'interface Epoll comme une interface à bord (Epollet):
Epoll, en revanche, n'est qu'une version plus rapide du sondage (2) et peut être utilisé partout, le scrutin (2) est utilisé car il a la logique identique chaque fois qu'elle est considérée comme un protocole déclenché de niveau (la norme chaque fois qu'Epollet est pas donné). La fonction de l'appelant a le choix de fournir le signal EpolLoneshot pour demander à l'Epoll de fermer le descripteur de fichier lié lors de la réception d'un événement avec epoll_wait. Pendant ce temps, même avec Epoll déclenché par le bord, de nombreuses actions peuvent être créées lors de la réception de plusieurs ensembles d'informations (2). L'appelant doit vraiment redéployer le descripteur de document avec Epoll_CTL (2) et EPOLL_CTL_MOD chaque fois que l'indicateur EpolLoneshot est donné.
Exemple:
Bien que la logique d'Epoll lorsqu'elle est utilisée comme API seuil est identique à celles du scrutin (2), l'utilisation du comportement déclenché par le bord appelle une plus grande explication pour empêcher les retards dans la file d'attente d'événements du programme. L'auditeur de cette illustration est une prise non bloquante sur laquelle la fonction d'écoute (2) est invoquée. Avant que Eagain ne soit donné soit par la fonction Read (2) ou Write (), la méthode utilise la fonction fd () pour maintenir le nouveau descripteur de fichier Ready (2). Une application de machine d'état motive d'événements pourrait tout aussi bien sauver son état actuel après avoir reçu Eagain afin qu'il puisse reprendre la lecture ou l'écriture au point précédent lorsque FD () est appelé à nouveau. Consultez le code apposé ici:
Afin d'améliorer l'efficacité, le descripteur de fichier ne peut être ajouté qu'une seule fois dans l'interface Epoll (Epoll CTL ADD) en désignant (Epollin | Epollout) comme interface déclenchée par le bord. En exécutant l'Epoll CTL (2) avec Epoll CTL Mod, vous pouvez éviter le décalage constant entre Epollin et Epollout. Le code restant de cette illustration est annexé dans l'image suivante:
Conclusion:
Il s'agit de l'utilisation de la fonction Epoll 7 C dans l'Ubuntu 20.04 Système d'exploitation Linux pour effectuer la programmation de socket. Nous avons expliqué comment une fonction Epoll () 7 C peut être utilisée pour vérifier la faisabilité des différents descripteurs de fichiers pour déterminer si l'entrée et la sortie qu'ils contiennent sont viables ou non, à la fois du serveur et du côté client.