GNU/Linux >> Znalost Linux >  >> Linux

Jak přenosné jsou /dev/stdin, /dev/stdout a /dev/stderr?

Občas potřebuji zadat „ekvivalent cesty“ jednoho ze standardních IO streamů (stdin , stdout , stderr ). Vzhledem k tomu, že 99 % času pracuji s Linuxem, vkládám před něj pouze /dev/ získat /dev/stdin atd. a toto „zdá se dělat správnou věc“. Ale za prvé jsem byl z takového zdůvodnění vždy nesvůj (protože, samozřejmě, „zdá se, že to funguje“, dokud to nefunguje). Navíc nemám dobrý pocit, jak přenosný je tento manévr.

Mám tedy několik otázek:

  1. Je v kontextu Linuxu bezpečné (ano/ne) dávat rovnítko stdin ,
    stdout a stderr pomocí /dev/stdin , /dev/stdout a
    /dev/stderr ?

  2. Obecněji řečeno, je tato ekvivalence „adekvátně přenosná “?

Nemohl jsem najít žádné reference POSIX.

Přijatá odpověď:

V Linuxu byl dostupný již v jeho prehistorii.
není POSIX, ačkoli mnoho skutečných shellů (včetně AT&T ksh a bash ) bude simulovat, pokud není přítomen v OS; všimněte si, že tato simulace funguje pouze na úrovni shellu (tj. přesměrování nebo parametr příkazového řádku, nikoli jako explicitní argument pro např. open() ).
Mělo by být dostupné na většině komerční unixové systémy, tak či onak (někdy se to píše /dev/fd/N pro různá celá čísla N , ale většina systémů s tím bude poskytovat symbolické odkazy jako Linux a *BSD).


Linux
  1. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  2. Kdy použít /dev/random vs /dev/urandom?

  3. Jak namapovat zařízení /dev/sdX a /dev/mapper/mpathY ze zařízení /dev/dm-Z

  1. Co jsou soubory /dev/zero a /dev/null v Linuxu

  2. Jak kódovat base64 /dev/random nebo /dev/urandom?

  3. Jak zaměníte /dev/sda s /dev/sdb?

  1. Kdy mám použít /dev/shm/ a kdy /tmp/?

  2. Jak mohu změnit množství a velikost linuxových ramdisků (/dev/ram0 - /dev/ram15)?

  3. Linux:Rozdíl mezi /dev/console , /dev/tty a /dev/tty0