Occasionalmente ho bisogno di specificare un "percorso equivalente" di uno dei flussi IO standard (stdin
, stdout
, stderr
). Poiché il 99% delle volte lavoro con Linux, antepongo semplicemente /dev/
per ottenere /dev/stdin
, ecc., e questo “sembra fare la cosa giusta”. Ma, per prima cosa, sono sempre stato a disagio per una tale logica (perché, ovviamente, "sembra funzionare" finché non funziona). Inoltre, non ho il buon senso di quanto sia portatile questa manovra.
Quindi ho alcune domande:
-
Nel contesto di Linux, è sicuro (sì/no) equiparare
stdin
,stdout
estderr
con/dev/stdin
,/dev/stdout
e/dev/stderr
? -
Più in generale, questa equivalenza è "sufficientemente portatile". “?
Non sono riuscito a trovare alcun riferimento POSIX.
Risposta accettata:
È stato disponibile su Linux nella sua preistoria.
Non lo è non POSIX, sebbene molte shell effettive (incluso AT&T ksh
e bash
) lo simulerà se non è presente nel sistema operativo; nota che questa simulazione funziona solo a livello di shell (cioè reindirizzamento o parametro della riga di comando, non come argomento esplicito per es. open()
).
Detto questo, dovrebbe essere disponibile sulla maggior parte sistemi Unix commerciali, in un modo o nell'altro (a volte si scrive /dev/fd/N
per vari interi N
, ma la maggior parte dei sistemi con questo fornirà collegamenti simbolici come fanno Linux e *BSD).