Ocasionalmente, necesito especificar un "equivalente de ruta" de uno de los flujos de IO estándar (stdin
, stdout
, stderr
). Dado que el 99 % del tiempo trabajo con Linux, solo antepongo /dev/
para obtener /dev/stdin
, etc., y esto “parece hacer lo correcto”. Pero, por un lado, siempre me ha preocupado ese razonamiento (porque, por supuesto, "parece funcionar" hasta que deja de funcionar). Además, no tengo buen sentido de cuán portátil es esta maniobra.
Así que tengo algunas preguntas:
-
En el contexto de Linux, ¿es seguro (sí/no) equiparar
stdin
,stdout
ystderr
con/dev/stdin
,/dev/stdout
y/dev/stderr
? -
En términos más generales, ¿es esta equivalencia “adecuadamente portátil “?
No pude encontrar ninguna referencia POSIX.
Respuesta aceptada:
Ha estado disponible en Linux desde su prehistoria.
no POSIX, aunque muchos shells reales (incluido AT&T ksh
y bash
) lo simulará si no está presente en el sistema operativo; tenga en cuenta que esta simulación solo funciona a nivel de shell (es decir, redirección o parámetro de línea de comando, no como argumento explícito para, por ejemplo, open()
).
Dicho esto, debería estar disponible en la mayoría sistemas Unix comerciales, de una forma u otra (a veces se escribe /dev/fd/N
para varios enteros N
, pero la mayoría de los sistemas con eso proporcionarán enlaces simbólicos como lo hacen Linux y *BSD).