Jak korzystać z systemu ankiet w C

Jak korzystać z systemu ankiet w C
Funkcja ankiety () umożliwia programom multipleksowanie wejściowych i wyjściowych za pośrednictwem serii deskryptorów plików. Innymi słowy, wywołanie systemowe ankiety () jest analogiczne do wywołania systemu Select () w pracy, ponieważ trzyma swój pożar dla jednego z kilku deskryptorów plików, stając się dostępnymi dla we/wy. Ankieta () analizuje przypisany deskryptor dokumentu do wymieniania zdarzeń (incydentów) do każdego elementu tablicy wskazującego na niego deskryptory plików. Metoda ankiety () może określić, który z deskryptorów plików program odczytuje lub zapisuje szczegóły, które widziały te incydenty. W tym przewodniku będziemy używać Ubuntu 20.04 Aby zrozumieć koncepcję wywoływania systemu ankiety () na Linux krok po kroku.

Składnia:

Int ankieta (struct pllfd *ufds, unsigned int nfds, int timeout);

Argument „FDS” określa deskryptory dokumentów do sprawdzenia, a także przypadki istotności dla każdego. Jest to odniesienie do tablicy, która ma jeden element dla każdego deskryptora otwartego dokumentu. Elementy tablicy są struktury Pollfd, w których FD oznacza deskryptor otwartego dokumentu, a wszystkie wydarzenia i ponowne zdarzenia, zwykle zwane masmasami, są generowane przez utworzenie połączenia odpowiednich flag zdarzeń:

Zapylenie:

Oprócz danych o wysokim priorytecie, dane informacyjne można odczytać pozbawione nawet zablokowania. Ponadto, jeśli komunikat odpowiedzi ma zerowe rozmiary, ten sygnał flagi jest generowany dla strumieni w Revents. Ta flaga ma takie samo znaczenie jak Pollrdnorm | Pollrdband.

Pollrdnorm:

Bez przerwy można odczytać zwykłe dane. Informacje na temat głównego priorytetu Pasmo 0 można odczytać pomimo przerwy w strumieniach. A jeśli komunikat odpowiedzi ma zerową długość, sygnał ten jest generowany w ponownych zdaniach.

Pollrdband:

Dane główne obawy zostaną odczytane, pomimo spowodowania wszelkich opóźnień. Informacje o zakresie priorytetów większe niż zero można odczytać, pomimo zakłócania strumieni. A jeśli odpowiedź komunikatu ma zero czasu trwania, sygnał ten jest propagowany w Revents.

Pollpri:

Mogą istnieć pewne wyjątki od deskryptora dokumentu. Informacje o najwyższym priorytecie można odczytać pozbawione zablokowania. Ponadto, jeśli odpowiedź wynosi zero czasu trwania, sygnał ten jest propagowany dla strumieni w obrotach.

Polout:

Użytkownicy mogą pisać za pomocą flagi Pollout. Pozbawione zatrzymania, można zarejestrować typowe dane. Informacje na temat pasma preferencji 0 można zarejestrować pomimo przerwy w strumieniach.

Polwwrnorm:

Działa tak samo jak Pollout.

Pollwband:

Najbardziej prioryteczne dane zostaną zapisane za pomocą tej flagi. Informacje na temat zakresów preferencji większe niż zero dla strumieni mogą być rejestrowane bez zablokowania. Ta aktywność ocenia tylko zespoły, które zostały już napisane co najmniej raz, ponieważ na tym strumieniu nie zapisano żadnego zespołu preferencji.

Poller:

Jest to warunek błędu i występuje tylko wtedy, gdy system lub przepływ napotkał problem. Ten symbol dotyczy tylko maski bitowej Revents; W trakcie uczestnika działań jest to pomijane.

Pollhup:

Określa warunek rozciągania i występuje tylko wtedy, gdy połączenie z systemem zostało wyłączone. To występowanie i parout są równie kompatybilne; Po wystąpieniu problemu strumień nigdy nie zostanie napisany.

Pollnval:

To określa nieprawidłowe lub niezwykłe żądanie. Ta działalność nie wyklucza jednak udziału w zapylaniu, pollrdnorm, polrdband lub polpri. Ten symbol dotyczy tylko maski bitowej Revents; jest pomijany w uczestniku wydarzenia.

Przykład wywołania systemu sondaży:

Wykonuje tę samą rolę co Select (), chociaż na większą skalę. Ankieta () jest dostępna na dowolnym komputerze Linux opartym na GLIBC. Starsze jądra naśladują ankieta () z Select () w całej bibliotece C. Jednak programy nie powinny dokonywać rozróżnienia. Oto przykład, jak się czuje. Więc otwórz terminal wiersza poleceń najpierw za pomocą klawisza skrótu „Ctrl+alt+t.„Po otwarciu musimy utworzyć plik typu C, aby napisać w nim kod typu C. Do tego korzystamy z redaktora Nano. Wypróbuj więc poniższe polecenie Nano w terminalu wraz z nazwą pliku C.

$ nano nowe.C

Teraz nano edytor plik C „nowy” został otwarty. Musisz najpierw dołączyć w nim niektóre biblioteki, zwłaszcza „ankieta.H ”Biblioteka. Główna funkcja została określona jako posiadająca typ powrotu całkowitego z dwoma argumentami w swoim parametrze, e.G., Argc i argv. Następnie zadeklarowaliśmy deskryptor pliku FD i tablicę typu znaków o nazwie „BUF.”Następnie zdefiniowano zmienną typu struktury o nazwie Polfd PFDS o wielkości 2. Następnie zadeklarowano otwarte połączenie systemowe, aby uzyskać wartość z tablicy typu znaków i przypisanie go do deskryptora pliku „FD”, jak widać na obrazie. Podczas gdy deskryptor pliku wynosi „1”, struktura „PFD” zostanie zaktualizowana o niektóre dane za pomocą flagi zapylania w nim. Teraz zdefiniowaliśmy funkcję połączenia systemowego (). Pierwszym parametrem wywołania systemu ankiety () jest struktura UFDS zastosowana w kodzie. Drugi parametr określa sumę struktur Pollfd w serii FDS.

A ostatni parametr pokazuje wartość limitu czasu liczb całkowitych dla wywołania systemu ankiety. Jeśli PFD są objadaniami i dodanymi o wartości 0, wówczas wywołanie systemu odczytu odczytuje dane z bufora. Instrukcja „Jeśli” zostanie użyta do sprawdzenia, czy instrukcja odczytu zwróciła swoją wartość do liczby całkowitej i zapisu danych. Jeśli struktura „PFD” jest w pozycji „1” podczas rewidowania i wprowadzania danych, wywołanie systemu odczytu użyje danych z bufora podczas korzystania z deskryptora „FD”.

Zapisz nowy.plik C i zamknij go. Teraz skompiluj go za pomocą kompilatora GCC.

$ gcc nowe.C

Podczas wykonywania tego kodu dodaliśmy dane w ankiecie do odczytania i zapisuje dane ponownie, jak w poniższym wyjściu.

$ ./A.na zewnątrz

Wniosek:

W tym wyżej opisanym artykule omówiliśmy połączenie systemowe ankiety () w języku c. Mam nadzieję, że ten samouczek będzie pomocny i wydajny podczas pracy nad systemem operacyjnym Linux.