Standard streams

Cuando ejecutamos un programa, Linux genera automaticamente tres canales de comunicacion entre ese programa y su entorno (por ejemplo la terminal).
Son tres:

  • stdin (entrada estandar, descriptor de archivo = 0)
  • stdout (salida estandar, descriptor de archivo = 1)
  • stderr (salida de errores estandar, descriptor de archivo = 2)

stdin es el canal que se usa para enviar (generalmente) texto desde el entorno hacia el programa. Por ejemplo: lo que tipeo en la terminal entra en la stdin del programa que se esta ejecutando.
stdout es lo contrario. Corresponde a los datos que el programa envia a su entorno (por ej. para mostrar texto en la pantalla de la terminal)
y stderr es similar a stdout pero solamente para enviar errores.

Si queres probar la stdin y stdout podes utilizar la herramienta "cat".
Ejecuta:

cat - (o simplemente "cat" sin parametros)

Ahora escribi cualquier cosa. Eso que estas escribiendo se esta acumulando en el buffer stdin asignado a cat.
Cuando apretes la tecla "enter" este programa va a leer ese texto acumulado y lo va a enviar a la stdout.
Como por defecto la stdout es la salida por pantalla, vas a ver lo que tipeaste... de nuevo (para terminar presiona Ctrl+C).

Gracias a la shell (por ej. bash) podes jugar un poco con esos canales.
si ejecuto:

echo Hola

... el texto aparece en pantalla porque por esa es la salida por defecto de la stdout.
Pero si lo ejecuto asi:

echo Hola > mensaje.txt

... el texto no aparece en pantalla, en cambio queda grabado dentro del archivo "mensaje.txt".
Eso pasa porque el simbolo ">" se utiliza para redireccionar la stdout hacia otro destino (por ej. un archivo).

Para redireccionar la stdin se utiliza el simbolo contrario "<".
Para probarlo ejecutamos:

echo Saludos desde www.lucianoaibar.com > Mensaje.txt
cat - < Mensaje.txt

Como ya lo explique, en la primera linea creamos un nuevo archivo "Mensaje.txt" y lo rellenamos con el texto "Saludos desde....".
Y en la segunda linea ejecutamos "cat" con el parametro "-" para ordenarle que lea de la stdin y gracias a la redireccion "<" le estamos enviando el contenido de nuestro archivo.
Finalmente cat escribe en stdout, la pantalla, lo que acaba de leer.

 

Comentarios