Parfois, j'ai besoin de spécifier un "chemin équivalent" de l'un des flux d'E/S standard (stdin
, stdout
, stderr
). Depuis 99 % du temps, je travaille avec Linux, je préfixe simplement /dev/
pour obtenir /dev/stdin
, etc., et cela "semble faire ce qu'il faut ». Mais, d'une part, j'ai toujours été mal à l'aise avec un tel raisonnement (parce que, bien sûr, "ça semble marcher" jusqu'à ce que ça ne marche pas). De plus, je n'ai aucune idée de la portabilité de cette manœuvre.
J'ai donc quelques questions :
-
Dans le contexte de Linux, est-il sûr (oui/non) d'assimiler
stdin
,stdout
, etstderr
avec/dev/stdin
,/dev/stdout
, et/dev/stderr
? -
Plus généralement, cette équivalence est-elle "adéquatement portable " ?
Je n'ai trouvé aucune référence POSIX.
Réponse acceptée :
Il a été disponible sur Linux depuis sa préhistoire.
Ce n'est pas POSIX, bien que de nombreux shells réels (y compris AT&T ksh
et bash
) le simulera s'il n'est pas présent dans le système d'exploitation ; notez que cette simulation ne fonctionne qu'au niveau du shell (c'est-à-dire la redirection ou le paramètre de ligne de commande, pas comme argument explicite par exemple open()
).
Cela dit, il devrait être disponible sur la plupart systèmes commerciaux Unix, d'une manière ou d'une autre (parfois cela s'écrit /dev/fd/N
pour divers entiers N
, mais la plupart des systèmes avec cela fourniront des liens symboliques comme le font Linux et *BSD).