So verwenden Sie Poll -System -Aufruf in c

So verwenden Sie Poll -System -Aufruf in c
Mit der Funktion Poll () können Programme Eingaben und Ausgabe durch eine Reihe von Dateideskriptoren Multiplex -Eingabe und -ausgabe ermöglichen. Mit anderen Worten, der Poll () -Systemanruf ist analog zu Select () -Systemanruf bei der Arbeit, da er ihr Feuer für einen von mehreren Dateideskriptoren hält, indem er für die I/O verfügbar ist. Poll () untersucht den zugewiesenen Dokumentdeskriptor für die Auflistung der Ereignisse in Vorfällen in jedem Element des Arrays, das von Dateideskriptoren darauf hinweist. Die Methode zur Umfrage () kann bestimmen, in welchen der Dateideskriptoren ein Programm Details lesen oder schreiben wird, wobei diese Vorfälle gesehen haben. In diesem Leitfaden werden wir Ubuntu 20 verwenden.04 Um das Konzept von POLL () Systemanruf auf Linux Schritt für Schritt zu verstehen.

Syntax:

Int Poll (struct polfd *ufds, nicht signiert int nfds, int timeout);

Das Argument „FDS“ bestimmt, dass die Dokumentdeskriptoren überprüft werden sollen, sowie die für jeden von Bedeutung von Bedeutung. Es ist ein Verweis auf eines Arrays, das ein Element für jeden offenen Dokument -Deskriptor hat. Die Elemente des Arrays sind Pollfd-Strukturen, bei denen FD einen offenen Dokument-Deskriptor bezeichnet, und alle Ereignisse und Wiederherstellungen, die normalerweise Bitmasks bezeichnet werden, werden durch Erstellen einer Zusammensetzung der entsprechenden Ereignisflags erzeugt:

Pollin:

Abgesehen von Daten mit hoher Priorität können Informationsdaten ausgelesen werden. Wenn die Antwortmeldung null Größen hat, wird dieses Flag -Signal für die Streams in Revents generiert. Diese Flagge hat die gleiche Bedeutung wie Pollrdnorm | Polrdband.

Polrdnorm:

Ohne Unterbrechung können gewöhnliche Informationsdaten gelandet werden. Informationen zum primären Prioritätsbetrag Band 0 können trotz der Unterbrechung von Streams gelesen werden. Und wenn die Antwortmeldung von Null Länge hat, wird dieses Signal in erneuten Einrichtungen erzeugt.

Pollrdband:

Die Daten der Hauptanliegen werden trotz Verzögerungen vorgelesen. Informationen zu Prioritätsbereichen größer als Null können trotz der Eingriffe in Streams gelesen werden. Und wenn die Nachrichtenantwort von Null dauer ist, wird dieses Signal in Revents verbreitet.

Pollpri:

Es kann einige Ausnahmen vom Dokumentdeskriptor geben. Informationen mit oberster Priorität können gelesen werden. Auch wenn die Antwort Nulldauer ist, wird dieses Signal für Streams in Revents verbreitet.

Pollout:

Benutzer können mit dem Pollout -Flag schreiben. Es können typische Daten entzogen werden, die angehalten werden, und können aufgezeichnet werden. Informationen zum Präferenzband 0 können trotz der Unterbrechung der Streams aufgezeichnet werden.

Pollwrnorm:

Es funktioniert genauso wie Pollout.

PURDWRAND:

Die vorrangigsten Daten werden mit diesem Flag geschrieben. Informationen zu Präferenzbereichen größer als Null für Streams können aufgezeichnet werden, ohne blockiert zu werden. Diese Aktivität bewertet nur Bands, auf die bereits einmal geschrieben wurde, da in diesem Stream keine Präferenzbande geschrieben wurde.

Pollen:

Es ist eine Fehlerbedingung und tritt nur auf, wenn das System oder der Fluss auf ein Problem gestoßen ist. Dieses Symbol gilt nur für die Revents -Bitmaske; Während des Teilnehmers der Aktivitäten wird es übersehen.

Umfrage:

Es gibt den Aufstandszustand an und tritt nur auf, wenn die Verbindung zum System deaktiviert wurde. Dieses Ereignis und dieses Pollout sind ebenso kompatibel; Sobald ein Problem aufgetreten ist, wird ein Stream niemals geschrieben.

Pollnval:

Dies gibt die ungültige oder ungewöhnliche Anfrage an. Diese Aktivität schließt jedoch die Teilnahme an Pollin, Pollrdnorm, Pollrdband oder Pollpri nicht aus. Dieses Symbol gilt nur für die Revents -Bitmaske; Es wird im Teilnehmer der Veranstaltung übersehen.

Beispiel für den Aufruf des Umfragesystems:

Es spielt die gleiche Rolle wie select (), obwohl in größerem Maßstab. Poll () ist auf jeder glibc-basierten Linux-Maschine erhältlich. Die älteren Kerne imitieren die Umfrage () mit Select () in der gesamten C -Bibliothek. Programme sollten jedoch nicht unterscheiden müssen. Hier ist ein Beispiel dafür, wie sich die Umfrage () anfühlt. Öffnen Sie also den Befehlszeilenterminal zuerst mit der T -Shortcut -Taste „Strg+Alt+T.Nachdem wir es geöffnet haben, müssen wir eine C-Type erstellen, um einen C-Typencode darin zu schreiben. Dafür haben wir den Nano -Editor verwendet. Probieren Sie also den Befehl unten Nano im Terminal zusammen mit dem Namen der C -Datei aus.

$ nano neu.C

Jetzt wurde der Nano -Redakteur für die C -Datei „Neu“ geöffnet. Sie müssen zunächst einige Bibliotheken einfügen, insbesondere die „Umfrage.H ”Bibliothek. Die Hauptfunktion wurde als Ganzzahl -Rückgabetyp mit zwei Argumenten in seinem Parameter festgelegt, e.G., argc und argv. Dann haben wir einen Dateideskriptor -FD und ein Zeichen -Array mit dem Namen „BUF) deklariert.”Danach wurde eine Strukturtypvariable mit dem Namen Pollfd PFDs von Größe 2 definiert. Als nächstes wurde ein offener Systemaufruf deklariert, um den Wert aus dem Charakter -Typ -Array zu erhalten und ihn dem Dateideskriptor „FD“ zuzuweisen, wie im Bild zu sehen ist. Während der Dateideskriptor „1“ ist, wird die Struktur „PFDS“ mit einigen Daten unter Verwendung des darin enthaltenen Pollin -Flags aktualisiert. Jetzt haben wir eine Poll () -Systemanruffunktion definiert. Der erste Parameter des Systems für Umfrage () ist die im Code verwendete UFDS -Struktur. Der zweite Parameter gibt die Gesamtzahl der POLFD -Strukturen in der FDS -Serie an.

Und der letzte Parameter zeigt den Timeout -Wert des ganzzahligen Typs für den Aufruf des Umfragesystems an. Wenn die PFDs Revents sind und mit einem Wert von 0 hinzugefügt werden, lesen Sie die Daten aus dem Puffer aus. Die Anweisung „If“ wird verwendet, um zu überprüfen, ob die Read -Anweisung ihren Wert an eine Ganzzahl zurückgegeben hat und Daten schreiben. Wenn sich die Struktur „PFDS“ an der Position „1“ befindet, während sie die Daten beleidigen und eingeben.

Speichern Sie das Neue.c Datei und schließen Sie sie. Kompilieren Sie es nun mit dem GCC -Compiler.

$ gcc neu.C

Während der Ausführung dieses Codes haben wir Daten in einer Umfrage hinzugefügt, die vorgelesen werden sollen, und es schreibt Daten erneut wie in der folgenden Ausgabe.

$ ./A.aus

Abschluss:

In diesem oben beschriebenen Artikel haben wir Poll () -Systemaufruf in C-Sprache erörtert. Ich hoffe, Sie finden dieses Tutorial hilfreich und effizient, während Sie an dem Linux -Betriebssystem arbeiten.