Fonction Epoll 7 C

Fonction Epoll 7 C
La langue C est une langue très vaste en ce qui concerne l'utilisation de différentes technologies ou API. Il est également très utilisable lorsque nous voulons utiliser la programmation de socket. Juste comme ça, il apparaît avec les fonctions Epoll 7. Le sondage (2) et l'API Epoll observent tous deux les différents descripteurs de documents pour déterminer si les E / S sont possibles sur chacun d'eux. L'API EPOLL s'étend très bien avec le grand nombre de descripteurs de documents surveillés et peut être utilisé comme étant une passerelle de niveau ou de bord de bord ou de bord.

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.

  • Liste des intérêts: Le groupe d'intérêt, également connu sous le nom de Collection Epoll, est la collection de descripteurs de documents que la procédure a indiqué qu'elle souhaitait suivre. La collection de descripteurs de documents qui semblent être «prêts» pour les E / S est connu sous le nom de file d'attente entièrement.
  • Liste prête: La collection d'identifiants de documents qui sont «préparés» pour les E / S est connu sous le nom de «liste Ready."Les identificateurs de documents dans la liste d'intérêts sont un sous-groupe de (ou, plus correctement, une collection de pointeurs vers) la liste Ready. Le noyau utilise des opérations d'E / S sur ces descripteurs de documents pour remplir périodiquement la liste Ready.

Les fonctions système suivantes sont disponibles pour construire et administrer un objet EPOLL:

  • Epoll_create (2): la fonction Epoll Create (2) démarre une nouvelle instance du service EPOLL et renvoie un descripteur de fichier. (Le plus moderne Epoll Create1 (2) développe sur Epoll Create (2) (Capacité).)
  • EPOLL_CTL (2): contribue les choses à la liste d'intérêt de l'objet Epoll et est ensuite utilisée pour inscrire l'intérêt dans des descripteurs de documents spécifiques.
  • Epoll_wait (2): S'il n'y a pas d'activités d'E / S présents pour le moment, Epoll Wait (2) bloque le fil qui l'a appelé. (Cet appel système peut être considéré comme la collecte de choses à partir de la liste Ready de l'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:

  1. Le côté lu du descripteur de document d'un tuyau (RFD) est inscrit à l'objet Epoll.
  2. Un total de 2 kb de contenu écrit sur le mur d'écriture du conteneur par un auteur de tuyaux.
  3. Une demande d'attente d'Epoll (2) est faite, et RFD, une poignée de fichier préparée, est renvoyé.
  4. Du RFD, le lecteur de pipeline lira 1 kilobyte de contenu.
  5. Un appel de fonction EPOLL_WAIT (2) est fait.

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):

  • Descripteurs de documents non bloquants, et
  • Juste après avoir lu (2) ou écrire (2), livrer Eagain en allant attendre une action.

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.