Kann eine Gerätedatei in Linux auf mehrere Dateien verweisen?

Kann eine Gerätedatei in Linux auf mehrere Dateien verweisen?

Bei einer Shell in Linux (zum Beispiel: bash) verweisen die Dateideskriptoren stdinund stdoutund stderralle auf die gleiche Gerätedatei. Im Folgenden sind beispielsweise die Dateideskriptoren stdinund stdoutund für aufgeführt :stderrbash

Bildbeschreibung hier eingeben

Nun /dev/tty1handelt es sich nicht um eine „echte“ Datei, aus der Sie lesen und in die Sie schreiben können, sondern um eine Gerätedatei, die auf eine Datei oder einen Puffer im Speicher oder etwas anderes verweist.

Meine Frage ist nun: /dev/tty1Zeigt es nur auf eine Datei oder auf zwei Dateien?

Was ich meine ist, wenn bashvon /dev/tty1( stdin) gelesen wird und wenn bashin /dev/tty1( stdoutoder stderr) geschrieben wird, wird dann von dem gelesen und in den geschriebengleiche Datei, oder zeigt /dev/tty1auf zwei Dateien, von denen eine beim Lesen aus /dev/tty1und die andere beim Schreiben in verwendet wird /dev/tty1?

Antwort1

Ein Geräteknoten zeigt auf ein einzelnesGerät, das unter Linux vom Kernel verwaltet wird. Wenn bashvon gelesen wird /dev/tty1, liest es vom Gerätetreiber, der das erste Terminal verwaltet; wenn es dorthin schreibt, schreibt es in denselben Gerätetreiber.

Antwort2

Eine Gerätedatei „zeigt nicht auf mehrere Dateien“. Eine Gerätedatei „zeigt“ nicht einmal auf eine einzelne Datei. Eine Gerätedatei zeigt auf einen Treiber. Der Treiber enthält Code, der Lese- und Schreibvorgänge verarbeitet.

Es muss keine Beziehung zwischen den vom Gerät gelesenen und den geschriebenen Daten bestehen. Manche Geräte haben eine, andere nicht. Bei einer Festplatte sind beispielsweise die an einer bestimmten Position gelesenen Daten die Daten, die zuvor an diese Position geschrieben wurden. Bei einem seriellen Anschluss hingegen werden die an das Gerät geschriebenen Daten über die serielle Leitung gesendet und die vom Gerät gelesenen Daten über die serielle Leitung empfangen; was gesendet wird, ist unabhängig von dem, was empfangen wird.

Ein Terminal ist einem seriellen Gerät sehr ähnlich. Tatsächlich wurden physische Terminals früher normalerweise über serielle Leitungen verbunden. Wenn eine Anwendung aus einer Terminaldatei liest, empfängt sie Daten, die vom Terminaltreiber oder Terminalemulator gesendet wurden – der Terminaltreiber/Emulator schreibt Eingaben auf seine Seite des Terminals, die Anwendung liest Eingaben von ihrer Seite des Terminals. Wenn eine Anwendung in eine Terminaldatei schreibt, sendet sie Daten, die dann vom Terminaltreiber oder Terminalemulator gelesen werden – die Anwendung schreibt Ausgaben auf ihre Seite des Terminals, der Terminaltreiber/Emulator liest Ausgaben auf seiner Seite des Terminals.

verwandte Informationen