Pseudoterminals im BSD-Stil vs. Pseudoterminals von UNIX 98

Pseudoterminals im BSD-Stil vs. Pseudoterminals von UNIX 98

Basierend auf dem, was ich über Pseudoterminals in Linux gelesen habe, gibt es zwei Arten von Pseudoterminals:Pseudoterminals im BSD-Stil(das veraltet ist) undUNIX 98-Pseudoterminals.

Ich habe zwei Bilder erstellt, die mein Verständnis dieser beiden Arten von Pseudoterminals zeigen.

Das folgende Bild zeigt, wie Pseudoterminals im BSD-Stil funktionieren (bitte korrigieren Sie mich, wenn das Bild falsch ist):

Bildbeschreibung hier eingeben

Diese Art von Pseudoterminals ist nicht schwer zu verstehen, jedes Terminal ist mit einem einzigartigen Master-Treiber verbunden.


Bei den Pseudoterminals von UNIX 98 ist die Sache jedoch etwas verwirrender. Das folgende Bild zeigt, wie dieser Typ von Pseudoterminals meiner Meinung nach funktioniert:

Bildbeschreibung hier eingeben

Grundsätzlich verwenden also alle Terminals den gleichen Master-Treiber ( /dev/ptmx), aber ich bin nicht sicher, woher der Master-Treiber weiß, wie er Folgendes macht:

  • Wenn Daten von einem der Terminalprozesse gesendet werden, woher weiß der Master-Treiber, an welchen TTY-Slave-Treiber die Daten weitergegeben werden sollen?

  • Wenn Daten von einem der TTY-Slave-Treiber gesendet werden, woher weiß der Master-Treiber, an welchen Terminalprozess die Daten weitergegeben werden sollen?

Weiß der Master-Treiber, wie das auf die Art und Weise geht, wie ich es im Bild gezeigt habe (d. h. der Master-Treiber verfügt über eine Zuordnungstabelle, die jede Terminal-PID dem entsprechenden TTY-Slave-Treiber zuordnet)?

Antwort1

Sie sind auf seltsame Weise fasziniert von Namen. /dev/ptmxist kein „Treiber“, sondern nur ein Name im Dateisystem, der eine besondere Bedeutung hat.

Ein Prozess öffnet einen neuen Master-PTY durch den Aufruf von posix_openpt(), der einen Dateideskriptor zurückgibt; derselbe Effekt kann durch den Aufruf von erreicht werden open(). /dev/ptmxJedes Mal, wenn ein Prozess einen open()aufruft/dev/ptmxneuPseudoterminal wird erstellt; das Pseudoterminal wird zerstört, wenn keine Prozesse mehr diesen Dateideskriptor geöffnet haben. Dieser Dateideskriptor bezieht sich auf die Masterseite des Pseudoterminals und kann wie jeder andere Dateideskriptor an untergeordnete Prozesse weitergegeben werden.

Weitere Informationen finden Sie unterunix.stackexchange.com/questions/117981. (Hut ab vor @JdeBP für den Vorschlag.)

Sobald ein Prozess einen Dateideskriptor hat, der auf eine Masterseite des Pseudoterminals verweist, kann er den Namen der Slaveseite des Pseudoterminals durch Aufrufen herausfinden ptsname()und diesen Namen an jeden Prozess weitergeben, den er über das Pseudoterminal steuern möchte.

verwandte Informationen