Gelegentlich muss ich ein „Pfad-Äquivalent“ eines der Standard-IO-Streams angeben (stdin
, stdout
, stderr
). Da ich zu 99 % mit Linux arbeite, stelle ich einfach /dev/
voran um /dev/stdin
zu erhalten , usw., und dies „scheint das Richtige zu tun“. Aber zum einen war ich wegen einer solchen Begründung immer unruhig (weil es natürlich „scheint zu funktionieren“, bis es nicht funktioniert). Außerdem habe ich kein gutes Gespür dafür, wie tragbar dieses Manöver ist.
Deshalb habe ich ein paar Fragen:
-
Ist es im Kontext von Linux sicher (ja/nein),
stdin
gleichzusetzen? ,stdout
, undstderr
mit/dev/stdin
,/dev/stdout
, und/dev/stderr
? -
Allgemeiner gesagt, ist diese Äquivalenz „angemessen tragbar „?
Ich konnte keine POSIX-Referenzen finden.
Akzeptierte Antwort:
Es war bis in die Vorgeschichte unter Linux verfügbar.
Ist es nicht POSIX, obwohl viele tatsächliche Shells (einschließlich AT&T ksh
und bash
) wird es simulieren, wenn es nicht im Betriebssystem vorhanden ist; Beachten Sie, dass diese Simulation nur auf Shell-Ebene funktioniert (d. h. Umleitung oder Befehlszeilenparameter, nicht als explizites Argument für z. B. open()
).
Das heißt, es sollte auf den meisten verfügbar sein kommerzielle Unix-Systeme, auf die eine oder andere Weise (manchmal wird es /dev/fd/N
geschrieben für verschiedene ganze Zahlen N
, aber die meisten Systeme damit bieten Symlinks wie Linux und *BSD).