Funkcja epoll 7 c

Funkcja epoll 7 c
Język C jest bardzo rozległym językiem, jeśli chodzi o korzystanie z różnych technologii lub interfejsów API. Jest to również bardzo użyteczne, gdy chcemy korzystać z programowania gniazda. Tak w ten sposób, wymyśli się funkcje EPOLL 7. Ankieta (2), jak i API EPOLL obserwują różne deskryptory dokumentów, aby ustalić, czy we/wy jest wykonalne dla każdego z nich. API EPOLL rozciąga się bardzo dobrze wraz z dużą liczbą monitorowanych deskryptorów dokumentów i może być używany jako brama przetransportowana na poziom.

Epoll Entity, model informacyjny w niszczycielu, który może być postrzegany z przestrzeni użytkownika jako opakowanie dla dwóch zestawów, służy jako podstawa idea API EPOLL. W ramach tego przewodnika omówimy użycie funkcji EPOLL w języku C.

  • Lista zainteresowań: Grupa zainteresowań, znana również jako kolekcja EPOLL, jest zbiorem deskryptorów dokumentów, które procedura wskazała, że ​​jest zainteresowana śledzeniem. Zbiór deskryptorów dokumentów, które wydają się być „gotowe” dla we/wy, jest znana jako kolejna kolejka.
  • Lista gotowa: Zbiór identyfikatorów dokumentów, które są „przygotowane” dla we/wy, jest znana jako „Lista gotowa.„Identyfikatory dokumentów na liście odsetek to podgrupa (lub, co bardziej poprawnie, zbiór wskaźników do) listy gotowych. Jądro używa operacji we/wy na takich deskryptorach dokumentów do okresowego wypełniania listy gotowych.

Dostępne są następujące funkcje systemowe do budowy i administrowania obiektem EPOLL:

  • Epoll_create (2): Funkcja EPOLL (2) rozpoczyna nową instancję usługi EPOLL i zwraca deskryptor pliku. (Bardziej nowoczesny epoll create1 (2) rozszerza epoll create (2) (zdolność).)
  • EPOLL_CTL (2): Wkłada rzeczy do listy zainteresowań Object Epoll, a następnie jest używany do zapisania zainteresowania konkretnymi deskryptorami dokumentów.
  • EPOLL_WAIT (2): Jeśli obecnie nie ma żadnych czynności we/wy, epoll czekaj (2) blokuje wątek, który go nazywał. (To połączenie systemowe można przeglądać jako zbieranie rzeczy z gotowej listy Epoll Obiekt.)

Wykonane z poziomu i wyzwalane krawędzi

Zachowania wyzwalane krawędzi (ET) i poziomy (LT) są możliwe dla interfejsu cyrkulacji padającego Epoll (LT). Różnice dwóch metod można podsumować w następujący sposób. Załóżmy, że następują następujące:

  1. Odczytana strona deskryptora dokumentu rury (RFD) jest zapisywana na obiekt EPOLL.
  2. W sumie 2 kb treści pisane na ścianie pisania pojemnika przez autora rurowego.
  3. Zwracany jest prośba o oczekiwanie epoll (2), a RFD, przygotowany uchwyt pliku, jest zwracany.
  4. Z RFD czytnik rurociągów przeczyta 1 kilobyte treści.
  5. Wykonywane jest wywołanie funkcji epoll_wait (2).

Żądanie do epoll_wait (2) złożone w kroku 5 prawdopodobnie zatrzyma się, jeśli uchwyt dokumentu RFD zostanie przypisany do protokołu EPOLL z sygnałem Epollet (Edge-Cerggered). W międzyczasie zdalny partner może przewidzieć reakcję w zależności od dostarczonej treści. Wynika to z faktu, że opcja wyzwalana przez krawę.

Dlatego funkcja dzwoniącego może być nawet zawieszona dla określonych informacji, która jest już w pamięci podręcznej bufora w fazie 5. We wspomnianym przykładzie zapis w 2 może spowodować utworzenie działania na RFD, a incydent zostanie odebrany za 3. Wezwanie do epoll_wait (2) w kroku 5 może utknąć, ponieważ aktywność odczytu w kroku 4 nie wykorzystała wszystkich informacji o buforze.

Aby zapobiec przeciągnięciu odczytu lub zapisu przed wyczerpaniem zadania, które zarządza różnymi deskryptorami plików, program korzystający z opcji epollet powinien używać deskryptorów dokumentów nie blokujących. Poniżej znajduje się zalecana procedura stosowania EPOLL jako interfejsu wyzwalanego krawędzi (EPOLLET):

  • Deskryptory dokumentów bez blokowania i
  • Zaraz po przeczytaniu (2) lub napisz (2), dostarcz Eagain, czekając na akcję.

Z drugiej strony epoll jest tylko szybszą wersją ankiety (2) i może być używana wszędzie sonda (2), ponieważ ma identyczną logikę, ilekroć jest postrzegana jako protokół wyzwalający poziom (standard, gdy jest epollet Nie podarowany). Funkcja dzwoniącego ma możliwość dostarczenia sygnału EpolloneShot, aby poinstruować EPOLL, aby zamknął podłączony deskryptor pliku podczas otrzymania wystąpienia z epoll_wait. Tymczasem, nawet z EPOLL wyzwalany przez krawędź, po przyjęciu kilku zestawów informacji (2) można stworzyć wiele działań (2). Dzwoniący naprawdę musi ponownie wdrożyć deskryptor dokumentu za pomocą epoll_ctl (2) i epoll_ctl_mod za każdym razem, gdy podano flagę epolloneShot.

Przykład:

Chociaż logika EPOLL, gdy jest używana jako progowy interfejs API jest identyczny z logiką. Słuchacz w tej ilustracji jest gniazdem niekony, na którym wywoływana jest funkcja słuchania (2). Przed podaniem eagain funkcją odczytu (2) lub zapisu () metoda używa funkcji fd (), aby utrzymać nowy deskryptor pliku gotowego (2). Oparta na zdarzeniowa aplikacja Machine Machine może równie dobrze uratować swój obecny stan po otrzymaniu Eagaina, aby mogła wznowić czytanie lub pisanie w poprzednim punkcie, gdy FD () jest ponownie wywoływany. Sprawdź kod umieszczony tutaj:

Aby poprawić wydajność, deskryptor pliku można dodawać tylko raz w ramach interfejsu EPOLL (EPOLL CTL Add) poprzez wyznaczenie (epollin | epollout) jako interfejs wyzwalający krawędź. Uruchamiając EPOLL CTL (2) z Modem EPOLL CTL, możesz uniknąć ciągłego zmiany wśród epollin i epollinout. Pozostały kod tej ilustracji jest dołączany na następujący obraz:

Wniosek:

Chodzi o użycie funkcji Epoll 7 C w Ubuntu 20.04 system operacyjny Linux do wykonania programowania gniazda. Omówiliśmy, w jaki sposób funkcję epoll () 7 c można użyć do sprawdzenia wykonalności różnych deskryptorów plików w celu ustalenia, czy zawierane przez nich dane wejściowe i wyjściowe są opłacalne, czy nie, zarówno ze strony serwera, jak i klienta.