GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est la portabilité de /dev/stdin, /dev/stdout et /dev/stderr ?

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 :

  1. Dans le contexte de Linux, est-il sûr (oui/non) d'assimiler stdin ,
    stdout , et stderr avec /dev/stdin , /dev/stdout , et
    /dev/stderr ?

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


Linux
  1. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  2. Linux :Différence entre /dev/console , /dev/tty et /dev/tty0 ?

  3. Quand utiliser /dev/random contre /dev/urandom ?

  4. Que sont les fichiers /dev/zero et /dev/null sous Linux

  5. Comment encoder en base64 /dev/random ou /dev/urandom ?

tty (/dev/tty ) vs pts (/dev/pts) sous Linux

Linux :Différence entre /dev/console , /dev/tty et /dev/tty0

noyau :désactiver /dev/kmem et /dev/mem

echo ou print /dev/stdin /dev/stdout /dev/stderr

Pourquoi < ou > sont-ils nécessaires pour utiliser /dev/tcp

Différences entre /dev/sda et /dev/sda1