Sonntag, Dezember 15, 2019

*nix auswählen und exceptfds/errorfds Semantik

Den wählen Sie syscall dauert 3 filedescriptors-sets für die Beobachtung von fds für die lesbar/schreibbar, und „Ausnahmen“ auf filedescriptors.

Meine wählen Sie Mann Seite nicht viel über die exceptfd – Deskriptor festgelegt. Für was wird es verwendet; welche Art von Ausnahmen kann und wird es Benachrichtigen Sie auf Datei-Deskriptoren?

Ich nehme an, dass diese Verschieden sein können für den Deskriptor-Typ,… ob es einen TCP-socket, eine pipe, ein tty , etc.). Hat jemand mehr info darüber, welche Art von Fehler select können Bericht über die verschiedenen Arten von Deskriptoren?

InformationsquelleAutor leeeroy | 2009-08-27

2 Kommentare

  1. 32

    Ist es manchmal gedacht, dass exceptfds nötig ist, Fehler zu erkennen, aber das ist ein Irrglaube. Fehler werden gekennzeichnet in readfds. Obwohl POSIX erfordert (und nennt sogar die parameter errorfds), es kommt auf das OS an, ob Fehler sind auch gekennzeichnet in exceptfds. Wirklich, dieser parameter wird nur dann benötigt, wenn Sie sich über außergewöhnlichen Bedingungen, aber nur selten ist es nötig zu erkennen, diese.

    Was qualifiziert als eine außergewöhnliche Bedingung hängt von der Art der Datei-Deskriptor, aber bei weitem die häufigste Verwendung ist auf einen TCP-socket, wo es zeigt, dass out-of-band-Daten werden gelesen mit recv() mit der MSG_OOB Flagge. Jedoch TCP-out-of-band-Daten hat eine Reihe von Macken (z.B. nur 1 byte ausstehen können) und als Ergebnis wird nur selten verwendet.

    In den letzten Linux-Kerneln exceptfds kann verwendet werden, um zu erkennen, Wann bestimmte sysfs-Attribute ändern. Der aktuelle Wert des Attributs gelesen werden können, durch das Lesen der entsprechenden Datei unter /sys, und ein select() auf der file-Deskriptor wird flag exceptfds, wenn das Attribut ändert. Doch das funktioniert bisher nur für einige der Attribute, und für Berg-änderungen (/proc/mounts).

    Auch einige Gerätetreiber Flagge bestimmte gerätespezifische Bedingungen mit exceptfds.

  2. 3

    Du hast Recht, es kommt auf die Art von Gerät Sie verweisen mit den Datei-Deskriptoren. Also, es ist unterschiedlich für sockets, FIFOs, serielle ports, etc…

    Blick auf die man-Seite Lesen(). An der Unterseite (zumindest unter OS X) es wird eine Liste der verschiedenen Fehler, die Sie bekommen können für verschiedene Geräte. Gleiches gilt für write().

    Für sockets, FIFOs und anderen IPC-Mechanismen, würde ich check out Unix Network Programming, Band 1 und 2. IIRC es beschreibt, welche Art von errnos zu erwarten, dass für verschiedene Fehlerzustände.

    Ich ging diesen Weg einmal mit FIFOs. Ich landete brainstorming alle Möglichkeiten, die Produzenten und Konsumenten interagieren können, mit jedem Ende der FIFO und dann schrieb Testfälle für jede dieser Situationen. Es war ein gut (obwohl langweilig) Weg zu entdecken, all die verschiedenen Fehlerbedingungen. Ich habe viel gelernt, obwohl letztendlich der code funktioniert jetzt.

    • während interressant, dass die Antwort auf die Frage nicht. Wenn ich das richtig verstehe Ihre Antwort, die Sie sprechen, mögliche Fehlerzustände (errno) ausgelöst gelesen, und das hat nichts zu tun mit exceptfds
    • Dies war vor sieben Jahren. Ich wünschte, ich könnte Ihnen sagen, was ich meinte, aber ich don ‚ T sogar erinnere mich an das schreiben dieser Antwort. Sorry, ich bin nicht in der Lage sein zu klären, meine Aussagen für Sie.

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...