Aplicaciones de consola en Linux

Ya pasaron de moda, pero a veces tiene sentido hacer una aplicación que solamente necesite una terminal de modo texto. En ambientes UNIX esto es muy útil ya que fácilmente se pueden utilizar remotamente via SSH sobre enlaces que no necesitan ser demasiado eficientes.

En UNIX, una terminal es un dispositivo, real o imaginario, que sabe cómo interpretar un flujo de caracteres y representarlo para armar una intefaz para un usuario humano. Una terminal real, física, es hoy en día un bicho raro, es un aparato grandote con una pantalla y un teclado que se conecta via una conexión serie a una computadora central. En un UNIX moderno una parte del kernel se dedica a emular una terminal, que, solamente via un flujo de caracteres, conecta el uso de la pantalla y el teclado con el resto del sistema.

Todo lo que se representa en una terminal tiene que provenir de ese enlace. Y ese enlace es solamente un flujo de byte. Si una aplicación, corriendo vinculada a una terminal, puede hacer un "bip", es porque hay un caracter que, recibido por la terminal, provoca ese sonido. Ese byte es el 7. Hay también secuencias de bytes para mover el cursor, para cambiar el color de los próximos caracteres a mostrar.

Pero ojo, no es necesario aprender esas secuencias de caracteres. Gracias a Dios existe una biblioteca estandarizada que ofrece las funciones normales que uno espera. Esta biblioteca se llama curses, y la implementación en Linux es conocida como ncurses.

Hay una cosa que es bastante curiosa para los que venimos de otros sistemas: ncurses está diseñada para funcionar sobre enlaces lentos. Las terminales que ncurses sabe manejar solamente saben poner caracteres donde está el cursor, por lo tanto para ir dibujando la pantalla hay que ir haciendo movimientos de cursor. El cursor se mueve también naturalmente cuando se escribe un carácter (avanza), y en este caso sin ninguna indicación extra. Existe por lo tanto la posibilidad de estudiar el camino mínimo que puede pedírsele al cursor para que dibuje una pantalla, es decir, minimizar el uso de códigos de control que solamente mueven el cursor. Para lograr esto el programador debe hacer todas las operaciones de escritura y estas se recordarán, pero no pasará nada en la pantalla. Posteriormente, al ser llamada la función refresh la bilioteca analizará el estado conocido de la pantalla actual y cómo debe verse la pantalla con las modificaciones y calculará la manera óptima de llevar a cabo esas modificaciones.

En algún momento continuaré la explicación sobre esta biblioteca. Por ahora, ojalá sirva esto que escribí a modo de introducción. =)


Volver al índice.


Por Nicolás Lichtmaier. Cualquier comentario o pedido de mayor claridad o extensión será bien recibido.