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.
Die folgenden Systemfunktionen stehen zur Verfügung, um ein Epoll -Objekt zu erstellen und zu verwalten:
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:
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:
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.