Latinoamérica
de.novatoanovato@gmail.com

Entrada, salida y error estándar

Dedicado al nuevo usuario de software libre

Entrada, salida y error estándar

Flujo de datos

Cuando hablamos de flujo de datos, en informática, generalmente lo asociamos a programación y a como estos mismos datos siguen un curso predefinido (programado) para obtener un resultado. En esta entrada hablaremos del flujo de datos estándar en la ejecución de programas del tipo CLI (Interfaz de lineas de comando) en sistemas operativos GNU/Linux. En resumen, veremos el flujo de datos estándar que se produce cuando ejecutamos un comando en GNU/Linux.

¿Que es el flujo de datos?

El flujo de datos es quien hace de intermediarios entre el origen, el programa y el destino de la información, sin importar de donde viene, a donde va y el tipo de datos. Se podría decir que esto sucede con cierto nivel de abstracción que permite desligar al programa (en nuestro caso, comando), en si, de tener que saber que o quien es el que brinda los datos, cuales son los tipos de datos y que o quienes lo leen. El flujo de datos en la manipulación de comandos en GNU/Linux es posible gracias a tres canales, estos son conocidos como: entrada, salida y error estándar.

Norma POSIX

Si es la primera vez que escuchas este termino, seguramente te estarás preguntando ¿Que es POSIX?.

Su nombre proviene del acrónimo de Portable Operating System Interface, y X (de UNIX). Y es una familia de normas (o estándares) escritos por la IEEE (Instituto de Ingeniería Eléctrica y Electrónica), que define una interfaz estándar del sistema operativo y de el entorno, incluyendo un intérprete de comandos. El término fue sugerido por Richard Stallman en la década de 1980. La traducción del acrónimo es «Interfaz de Sistema Operativo Portable».

Interesante, ¿verdad? Pero, por si aun no quedo claro, vamos a extrapolar un poco el termino ejemplificando:

Cuando se desarrolla software que cumple con los estándares POSIX existe una gran probabilidad de que se pueda utilizar en sistemas operativos del tipo Unix. De no ser así, podrían funcionar un unos sistemas y en otros no. Los comandos en GNU/Linux están desarrollados, en su mayoría, para trabajar bajo esta norma. POSIX define la interfaz de programación de las aplicaciones, las utilidades y los comandos.

  • POSIX.1, Core Services (implementa las llamadas del ANSI C estándar).
  • POSIX.1b, extensiones para tiempo real.
  • POSIX.1c, extensiones para hilos (threads).
  • POSIX.2, Shell y Utilidades (IEEE Std 1003.2-1992).

Luego de 1997 el Grupo Austin realizó modificaciones a POSIX. Las especificaciones tienen el nombre de Single Unix Specification:

  • POSIX:2001 o IEEE Std 1003.1-2001 equivale a la versión 3 de Single UNIX Specification.
  • POSIX:2004 o IEEE Std 1003.1-2004 implica una pequeña actualización de POSIX:2001.
  • A partir de 2009 POSIX:2008 o IEEE Std 1003.1-2008 representa la versión actual.

    1. La base de definiciones
    2. Las interfaces encabezamientos del sistema
    3. Los comandos y utilidades

Descriptores

En informática el término descriptor de archivo o descriptor de fichero o simplemente descriptor, es usado generalmente en sistemas operativos POSIX. (Por eso debemos entender antes que es POSIX).

Generalmente, un descriptor es una clave a una estructura de datos que reside en el núcleo, y que contiene detalles de todos los archivos abiertos.

En POSIX, esta estructura de datos se llama tabla de descriptores de archivos, donde cada proceso tiene la suya. La aplicación que es lanzada por un usuario pasa al núcleo la clave abstracta mediante una llamada al sistema, y el núcleo tendrá acceso al archivo del nombre de la aplicación, que se basará en la clave. Esa misma aplicación no puede acceder a la tabla de descriptores de archivo directamente, ni para leerla ni para escribirla. Cuando ejecutamos un comando, este ocupa descriptores estándar utilizados como canales de datos para la entrada, la salida y el error estándar.

Descriptores para la salida, entrada y error estándar

En GNU/Linux contamos con tres descriptores de archivo estándar de POSIX para cada proceso, que son representados físicamente como archivos en el sistema, en GNU/Linux todo se representa como archivos.

  • stdin: Representa la entrada estándar (del ingles Standard Input) y consiste en los datos que son enviados al programa. En la mayoría de los casos, estos datos son ingresados mediante el teclado o son el resultado de la ejecución de un comando anterior. El descriptor de archivo asociado a stdin es el 0.
  • stdout: Representa la salida estándar (del ingles Standard Output) es la vía por la que el programa devuelve los datos luego de su ejecución. Por lo general, stdout es la pantalla de la computadora. El descriptor de archivo asociado a stdout es el 1.
  • Stderr: Representael error estándar (del ingles Standard Error) es el canal por el que se envía un mensaje de error en caso de que la ejecución falle. Generalmente, por defecto, también se visualizará por pantalla. El descriptor de archivo asociado a stderr es el 2.

Entrada, salida y error estándar

Cuando hablamos del flujo de datos estándar en la ejecución de comandos, nos referimos a como es que la información fluye de forma predetermina desde que ingresamos un dato para que sea procesado por un comando, hasta que obtenemos un resultado de ello sin ninguna intervención. El contexto, sistemas operativos e interfaces POSIX que utilizan descriptores como canales que establecen el flujo de datos de forma estándar.

Veamos un ejemplo:

echo "Hola Linuxero"

En este caso es ingresada, por teclado como entrada estándar (stdin=0) la cadena «Hola Linuxero», esta es procesada por el comando echo, quien nos devuelve como resultado por pantalla como salida estándar (stdout=1) el mensaje Hola Linuxero. Esto sucede cuando el comando se ejecuto de forma correcta. ¿Pero que pasa si no es así?.

Veamos otro ejemplo:

ls /error

En este caso intente listar el contenido de un directorio que no existe en el sistema de archivos. Ingrese por teclado el directorio /error como entrada estándar (stdin=0) quien fue procesado por el comando ls, al no poder leer el contenido del directorio no imprime por pantalla la salida de error estándar (stderr=2) el mensaje:

ls: no se puede acceder a ‘/error’: No existe el fichero o el directorio

Si tuviéramos que diagramarlo, se podría interpretar de la siguiente manera.

Es importante sentar las bases sobre el flujo de datos estándar, debido a que aparir de aquí es posible modificarlo ya sea haciendo uso de redireccionamientos o de tuberías.

Nota: Se están escribiendo por separado ambos artículos (redireccionamientos y tuberías).

Espero sea de utilidad.
Saludos, Cristian.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

18 − 5 =