Przykład wyboru połączenia systemowego:
Miejmy prosty przykład, aby sprawdzić działanie wybranych połączeń systemowych. Otwórz powłokę linii poleceń za pomocą „Ctrl+alt+t.”Po otwarciu terminalu upewnij się, że masz w systemie kompilator języka C, ponieważ kod nie będzie działał bez niego. Jeśli go nie masz, wypróbuj poniższe polecenie, aby to zrobić.
$ sudo apt instal gcc
Jeśli chcesz zobaczyć działanie połączeń systemowych Linux, musisz mieć zainstalowany pakiet ManPages-dev w systemie zgodnie z poniższym poleceniem. Napisz hasło użytkownika, aby kontynuować.
$ sudo apt Zainstaluj ManPages-dev
Możesz zobaczyć składnię i działanie na wywołanie systemowe za pomocą poniższego polecenia „Man”.
$ man 2 Wybierz
Strona wyjściowa dla wybranego wywołania systemowego jest pokazana poniżej. Oprócz tego, naciskając klawisz „Q”.
Standardowe katalogi, terminal powłoki poleceń i pseudo-końcowe aplikacje, dokumenty skoncentrowane na strumieniu, FIFOS, w tym rury, są obsługiwane przez moduł Select (). Aktywność selekcji () w deskryptorach dokumentów odnoszących się do tych innych formatów plików jest nieznana. Poniżej znajduje się wyjaśnienie wybranego połączenia systemowego.
Opis składni pokazanej na powyższym obrazie opisano poniżej.
Powyżej znajduje się biblioteka, która ma być zawarta w kodzie C podczas korzystania z wywołania systemu Wybierz. Jeśli nie jest to uwzględnione, kod nie działa.
NFDS Instrukcja określa zestaw deskryptora pliku, który zostanie oceniony. Metoda Wybierz () sprawdza deskryptory plików między 0 a NFDS-1.
Chwila ReadFDS nie jest NULL, odnosi się do tablicy formularza FD_SET, która określa, które deskryptory dokumentów powinny być przetestowane pod kątem gotowości do odczytu na wejściu, a deskryptory dokumentów powinny być gotowe do odczytania na wyjściu.
Kiedy Writefds Parametr nie jest pusty, odnosi się do jednostki formularza FD_SET, który określa, które deskryptory dokumentów powinny być przetestowane pod kątem gotowości do wpisywania wejścia. Deskryptory dokumentów powinny być przygotowane do komponowania na wyjściu.
Podczas errorfds Parametr nie jest pusty, odnosi się do obiektu rodzaju FD_SET, który określa, które deskryptory dokumentów powinny być przetestowane w celu oczekiwania na stan błędów na Input; Ponadto deskryptory dokumentów należy zweryfikować na wyjściu.
Parametry ReadFDS, WriteFDS i ERRORFDS są aktualizowane po osiągnięciu, aby oznaczyć, że deskryptory dokumentów są przygotowane do odczytu, w pełni przygotowania do pisania, a nawet wykorzystywać stan wyjątkowy, odpowiednio czekający. Jeśli kolejne bit zostanie ustalony na danych wejściowych, a odpowiednia sytuacja jest ważna dla każdego deskryptora pliku nieco w ramach NFDS, późniejszy bit zostałby umieszczony na skutecznym osiągnięciu.
Chociaż parametr limitu czasu nie jest tak naprawdę pusty, prowadzi do struktury encji czasowej, która determinuje najwyższy czas na utrzymanie ognia dla wyboru zakończenia. Select () nie do końca przeszkadza, jeśli taki parametr limitu czasu prowadzi do struktury obiektu czasowego z 0 elementami. Wybierz () zatrzymuje się, chyba że wystąpienie pozwala na pobranie jednego z filtrów za pomocą wyniku prawdziwego (niezerowego), czy instrukcja limitu czasu jest pustym odniesieniem. Select () odniesie sukcesy skutecznie i wytwarza 0, gdy okres oczekiwania zakończy się jeszcze przed wystąpieniem, co może wymagać dostosowania jednej z kilku masek do wartości niezerowej.
To makro eliminuje kolekcję (usuwa wszystkie deskryptory dokumentów). Może być używany jako pierwszy ruch w inicjalizacji kolekcji deskryptora dokumentu.
Deskryptor dokumentu FD jest dodawany do kolekcji przez ten makro. Korzystanie z deskryptora dokumentu do kolekcji, która już istniała, byłaby nieoperacyjna i dlatego nie powoduje błędu wyjątku.
Deskryptor dokumentu FD jest usuwany z kolekcji przez ten makro. Deskryptor pliku wyeliminowany z kolekcji, który nie istnieje, jest nieoperacyjny i dlatego nie powoduje wyjątku.
Wywołanie systemowe Select () zmienia informacje lub dane z kolekcji zgodnie z powyższymi regułami. Makro FD isset () można odrzucić, wywołując Select (), aby sprawdzić, czy deskryptor dokumentu pozostaje dostępny w kolekcji.
Utwórzmy nowy plik typu C o nazwie „Nowy.c ”jak poniżej.
$ nano nowe.C
Redaktor GNU został otwarty. Napisz w nim kod niż kod. Kod zawiera nagłówki, główna funkcja z niektórymi deskryptorami plików, jak opracowano powyżej. Zawiera również strukturę dla wartości przedziału czasu. Następnie użyliśmy wywołania systemu Wybierz, aby sprawdzić błąd w instrukcji „jeśli”. Naciśnij „Ctrl+S”, aby zapisać ten kod i „Ctrl+X” od rezygnacji z edytora.
Teraz skompiluj kod za pomocą instrukcji „GCC”.
$ gcc nowe.C
Uruchom kod i nie dodawaj żadnych danych wejściowych. Dane wyjściowe powie „Wybierz limit czasu."
$ ./A.na zewnątrz
Ponownie uruchom kod i podaj pewne dane wejściowe w terminalu, e.G., „AQSA.„Wyświetli się, że„ dane są dostępne."
Wniosek:
Zaimplementowaliśmy Wybierz połączenie systemowe na Ubuntu 20.04 System Linux. Kod powinien działać na wszystkich rozkładach Linuksa w równym stopniu i prawidłowym. Mam nadzieję, że ten artykuł będzie łatwy do wdrożenia i zrozumienia.