Epoll 7 C -Funktion

Epoll 7 C -Funktion
Die C -Sprache ist eine sehr große Sprache, wenn es um die Verwendung verschiedener Technologien oder APIs geht. Es ist auch sehr nutzbar, wenn wir die Socket -Programmierung verwenden möchten. Genau so erscheint es die Epoll 7 -Funktionen. Umfrage (2) und die Epoll -API beobachten beide die verschiedenen Dokumentdeskriptoren, um festzustellen, ob E/A für jeden von ihnen machbar ist. Die Epoll-API erstreckt sich sehr gut mit der großen Anzahl überwachter Dokumentdeskriptoren und kann entweder als ein Pegel gepromiertes oder ein Kantengeschwindigkeits-Gateway verwendet werden.

Die Epoll-Entität, ein In-Kernel-Informationsmodell, das aus dem Benutzerraum als Wrapper für zwei Sätze aus erscheint werden kann, dient als grundlegende Idee der Epoll-API. Innerhalb dieses Handbuchs diskutieren wir die Verwendung der Epoll -Funktion in der C -Sprache.

  • Zinsliste: Die Interessengruppe, auch als Epoll -Sammlung bekannt, ist die Sammlung von Dokumentendeskriptoren, die das Verfahren gezeigt hat, dass sie daran interessiert ist, den Überblick zu behalten. Die Sammlung von Dokument-Deskriptoren, die für I/O „bereit“ zu sein scheinen.
  • Bereitete Liste: Die Sammlung von Dokumentenkennungen, die für die E/A „vorbereitet“ sind.Die Dokumentkennungen in der Interessenliste sind eine Untergruppe von (oder genauer. Der Kernel verwendet E/A -Operationen in solchen Dokumentdeskriptoren, um die fertige Liste regelmäßig zu füllen.

Die folgenden Systemfunktionen stehen zur Verfügung, um ein Epoll -Objekt zu erstellen und zu verwalten:

  • EPOLL_CREATE (2): Die Funktion EPOLD CREATE (2) Startet eine neue Instanz des Epoll -Dienstes und gibt einen Dateideskriptor zurück. (Die modernere EPOLL CREATE1 (2) erweitert EPOLD CREATE (2) (Fähigkeit).)
  • EPOLL_CTL (2): trägt Dinge zur Interessenliste des Epoll -Objekts bei und wird dann verwendet, um das Interesse an bestimmten Dokumentdeskriptoren aufzunehmen.
  • Epoll_wait (2): Wenn momentan keine E/A -Aktivitäten vorhanden sind, blockiert Epoll Warted (2) den Thread, der ihn genannt hat. (Dieser Systemaufruf kann als Sammeln von Dingen aus der Ready List des Epoll -Objekts angesehen werden.)

Ebene ausgelöscht und Kanten ausgelöst

Rande-ausgelöste (ET) und Level-ausgelöste (LT) Verhaltensweisen sind sowohl für die EPOLD-einfallende Zirkulationsschnittstelle (LT) möglich. Die Unterschiede der beiden Methoden können wie folgt zusammengefasst werden. Angenommen, die folgenden Abspiele:

  1. Die Leseseite des Dokumentdeskriptors (RFD) eines Rohrs ist am Epoll -Objekt aufgenommen.
  2. Insgesamt 2 KB -Inhalte, die von einem Rohrautor an der Schreibwand des Containers geschrieben werden.
  3. Eine Anfrage an Epoll Wait (2) wird gestellt, und RFD, ein vorbereitetes Dateihandle, wird zurückgegeben.
  4. Aus der RFD wird der Pipeline -Leser 1 Kilobyte Inhalt lesen.
  5. Ein Funktionsaufruf von epoll_wait (2) wird getätigt.

Die Anforderung an epoll_wait (2), die in Schritt 5 erstellt wurde. In der Zwischenzeit könnte der abgelegene Partner eine Reaktion erwarten, abhängig von dem bereits gelieferten Inhalt. Dies liegt daran.

Daher muss die Anruferfunktion möglicherweise sogar für eine bestimmte Informationen, die sich bereits im Puffer -Cache in Phase 5 befinden, auf Eis gelegt werden. Im oben genannten Beispiel kann das Schreiben in 2 eine Aktivität aus auslösen, die auf der RFD erstellt werden soll, und der Vorfall wird in 3 empfangen. Der Anruf bei epoll_wait (2) in Schritt 5 kann stecken bleiben, da die Leseaktivität in Schritt 4 nicht alle Pufferinformationen verwendet hat.

Um zu verhindern, dass ein Abstand gelesen oder geschrieben wird, um einen Job zu erschöpfen, bei dem die verschiedenen Dateideskriptoren verwaltet werden, sollte ein Programm, das die Epollet-Option verwendet. Das Folgende ist ein empfohlenes Verfahren für die Verwendung der EPOLL als von Kanten ausgelöste (Epollet) Schnittstelle:

  • Nicht blockierende Dokumentdeskriptoren und
  • Kurz nach dem Lesen (2) oder schreiben (2), geben Sie Eagain, indem Sie auf eine Aktion warten.

Epoll hingegen ist nur eine schnellere Version der Umfrage (2) und kann überall verwendet werden (2), da es die identische Logik hat, wenn es als auf Ebene ausgelöster Protokoll angesehen wird (der Standard, wann immer Epollet ist nicht angegeben). Die Anruferfunktion hat die Wahl, das Epolloneshot -Signal zu liefern, um die EPOLL zu unterweisen, den verknüpften Dateideskriptor zu schließen, wenn er mit epoll_wait vorkommt. In der Zwischenzeit können bei der Empfang der verschiedenen Informationssätze viele Aktionen erstellt werden (2), selbst bei der von Edge ausgelösten Epoll können viele Aktionen erstellt werden (2). Der Anrufer muss den Dokument -Deskriptor wirklich mit dem EPOLL_CTL (2) und EPOLL_CTL_MOD neu einsetzen, wenn das EPOLLONESHOT -Flag angegeben wird.

Beispiel:

Obwohl die Logik der Epoll als Schwellenwert-API mit denen von Poll (2) identisch ist. Der Hörer in dieser Illustration ist eine nicht blockierende Buchse, auf der die Hören (2) -Funktion aufgerufen wird. Bevor Eagain entweder durch Read (2) oder Write () -Funktion angegeben wird, verwendet die Methode die Funktion fd (), um den neuen Deskriptor der neuen Ready -Datei (2) zu verwalten. Eine ereignisgesteuerte Statusmaschinen-App kann nach Erhalt von Eagain auch ihren gegenwärtigen Zustand speichern. Schauen Sie sich hier den angebotenen Code an:

Um die Effizienz zu verbessern, darf der Dateideskriptor nur einmal innerhalb der EPOLD-Schnittstelle (EPOLD CTL Add) durch Bezeichnung (epollin | epolout) als Kanten-ausgelöste Schnittstelle hinzugefügt werden. Durch Ausführen der EPOLL CTL (2) mit EPOLL CTL MOD können Sie das konstante Verschieben zwischen Epollin und Epolut vermeiden. Der verbleibende Code für diese Abbildung ist im folgenden Bild hinzugefügt:

Abschluss:

Hier geht es um die Verwendung der Epoll 7 C -Funktion im Ubuntu 20.04 Linux -Betriebssystem zur Durchführung der Socket -Programmierung. Wir haben besprochen, wie eine EPOLL () 7 C -Funktion verwendet werden kann, um die Machbarkeit der verschiedenen Dateideskriptoren zu überprüfen, um festzustellen, ob die Eingabe und die Ausgabe, die sie enthalten.