GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie portabel sind /dev/stdin, /dev/stdout und /dev/stderr?

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:

  1. Ist es im Kontext von Linux sicher (ja/nein), stdin gleichzusetzen? ,
    stdout , und stderr mit /dev/stdin , /dev/stdout , und
    /dev/stderr ?

  2. 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).


Linux
  1. So generieren Sie ein zufälliges Passwort unter Linux mit /dev/random

  2. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

  3. Wann sollte /dev/random vs. /dev/urandom verwendet werden?

  4. So ordnen Sie /dev/sdX- und /dev/mapper/mpathY-Geräte vom /dev/dm-Z-Gerät zu

  5. Wie tauscht man /dev/sda mit /dev/sdb aus?

tty (/dev/tty ) vs. pts (/dev/pts) unter Linux

Wie kann /dev/random oder /dev/urandom mit base64 codiert werden?

Wie Linux /dev/tty und /dev/tty0 verwendet

Ist es falsch, /dev/random unter Linux mit /dev/urandom zu verknüpfen?

echo oder print /dev/stdin /dev/stdout /dev/stderr

Warum sind < oder > erforderlich, um /dev/tcp