Beispiel für ausgewählte Systemaufruf:
Lassen Sie uns ein einfaches Beispiel haben, um die Funktionsweise des ausgewählten Systemaufrufs zu überprüfen. Öffnen Sie die Befehlszeilenschale mit dem „Strg+Alt+t.”Nach der Terminalöffnung stellen Sie sicher. Wenn Sie keinen haben, probieren Sie dazu den Befehl unten aus.
$ sudo APT Installieren Sie GCC
Wenn Sie sehen möchten, dass das Linux-SELECT-Systemanruf funktioniert, müssen Sie das Paket von Manpages-dev auf Ihrem System gemäß dem folgenden Befehl installiert haben. Schreiben Sie Ihr Benutzerkennwort, um fortzufahren.
$ sudo apt installieren Manpages-dev
Sie können die Syntax und das Arbeitsarbeiten des ausgewählten Systemaufrufs mit dem folgenden Befehl „Man“ sehen.
$ MAN 2 SELECT
Die Seite "Ausgabemann" für den SELECT -Systemaufruf ist unten angezeigt. Beenden Sie es, indem Sie die Taste "Q" drücken.
Standardverzeichnisse, Befehlsschalen-Terminal- und Pseudo-terminale Anwendungen, Streams zentrierte Dokumente, FIFOs, einschließlich Rohre, werden vom Modul Select () unterstützt. Die Aktivität von Select () für Dokumentdeskriptoren, die sich auf diese anderen Dateiformate beziehen, ist unbekannt. Im Folgenden finden Sie also die Erläuterung des Auswahlsystemaufrufs.
Die Beschreibung der im obigen Bild gezeigten Syntax wird unten beschrieben.
Oben ist die Bibliothek, die in den C -Code aufgenommen wird, während der Systemanruf verwendet wird. Wenn es nicht enthalten ist, funktioniert der Code nicht.
Der NFDs Die Anweisung definiert den Dateideskriptorsatz, der ausgewertet wird. Die Methode select () überprüft die Dateideskriptoren zwischen 0 und NFDS-1.
Während Readfds ist nicht null, es bezieht sich auf ein Array von Form FD_SET, das definiert, welche Dokumentdeskriptoren auf die Eingabe gelesen werden sollten und welche Dokumentdeskriptoren alle für die Ausgabe gelesen werden sollten.
Wenn das Writefds Der Parameter ist nicht leer, er bezieht sich auf eine Entität von Form FD_SET, die definiert, welche Dokumentdeskriptoren getestet werden sollten, um die Bereitschaft auf die Eingabe zu beschreiben. Die Dokumentdeskriptoren sollten vorbereitet sein, um die Ausgabe zu komponieren.
Während ERRORFDS Der Parameter ist nicht leer, er bezieht sich auf ein Objekt der Art FD_SET, das feststellt, welche Dokumentdeskriptoren auf die Eingabe auf den Fehler auf den Fehler auf den Fehler getestet werden sollten. Außerdem sollten die Dokumentdeskriptoren bei der Ausgabe überprüft werden.
Die Parameter ReadFds, WriteFDs und Fehlerflden werden nach der Leistung aktualisiert, um zu deuten,. Wenn das nachfolgende Bit auf die Eingabe festgelegt ist und die relevante Situation für jeden Dateideskriptor ein wenig unter NFDS gültig ist, wird das nachfolgende Bit auf eine effektive Leistung aufgenommen.
Während der Zeitüberschreitungsparameter nicht wirklich leer ist, führt er zu einer Struktur -Timeval -Entität, die die höchste Zeit feststellt, Ihr Feuer für die Auswahl zu halten, um fertig zu werden. Select () behindert nicht ganz, wenn ein solcher Zeitüberschreitungsparameter zu einem Struktur -Timeval -Objekt mit 0 Elementen führt. Select () stoppt, es sei denn, ein Auftreten kann einem der Filter mit einem echten (ungleich Null) Ergebnis abgerufen werden, unabhängig davon, ob die Timeout-Anweisung eine leere Referenz ist. Select () ist effektiv erfolgreich und erzeugt 0, wenn die Wartezeit endet.
Dieses Makro eliminiert die Sammlung (löscht alle Dokumentdeskriptoren). Es kann als der erste Schritt in der Initialisierung einer Dokumentdeskriptorsammlung verwendet werden.
Das Dokumentdeskriptor FD wird der Sammlung durch dieses Makro hinzugefügt. Die Verwendung eines Dokumentdeskriptors zu einer bereits vorhandenen Sammlung wäre nicht operativ und führt daher nicht zu einem Ausnahmefehler.
Das Dokumentdeskriptor FD wird durch dieses Makro aus der Sammlung entfernt. Ein Dateideskriptor, der nicht existiert, ist nicht operativ und führt daher nicht zu einer Ausnahme.
Der System select () verändert die Informationen oder Daten der Sammlungen gemäß den oben genannten Regeln. Das FD ISSET () -Makro kann abgeschoben werden, indem Sie select () aufrufen, um festzustellen, ob ein Dokument -Deskriptor in einer Sammlung verfügbar bleibt.
Erstellen wir eine neue C -Type mit dem Namen „Neu“.c ”wie unten.
$ nano neu.C
Der GNU -Redakteur wurde geöffnet. Schreiben Sie den unteren Code darin auf. Der Code enthält Header, Hauptfunktion mit einigen Dateideskriptoren, wie oben ausgearbeitet. Es enthält auch eine Struktur für den Zeitintervallwert. Anschließend haben wir den Select -System -Aufruf verwendet, um den Fehler in der Anweisung "If" zu überprüfen. Drücken Sie "Strg+S", um diesen Code zu speichern, und "Strg+x" vor dem Beenden des Editors.
Kompilieren Sie nun den Code mit der Anweisung "GCC".
$ gcc neu.C
Führen Sie den Code aus und fügen Sie keine Eingabe hinzu. In der Ausgabe heißt es: „Timeout auswählen.”
$ ./A.aus
Führen Sie den Code erneut aus und geben Sie eine Eingabe im Terminal an, e.G., „Aqsa.Es wird ausgegeben, dass die „Daten verfügbar sind.”
Abschluss:
Wir haben den Select -System -Aufruf im Ubuntu 20 implementiert.04 Linux -System. Der Code sollte an allen Verteilungen von Linux gleich und ordnungsgemäß funktionieren. Ich hoffe, Sie finden diesen Artikel leicht zu implementieren und zu verstehen.