Una vez que hemos entrado en sesión en linux, introduciendo nuestro nombre de usuario y clave, abrimos una shell de linux. Suele haber un icono en el escritorio o en la barra de herramientas que nos permite abrirla. La shell es una ventana de texto en la que podemos escribir comandos de linux y ver los resultados. Esta shell es la que usaremos para hacer nuestro programa. En unix siempre se ha llamado shell, creo que en linux la llaman bash.
Por supuesto, todo esto es suponiendo un linux moderno que entra en un entorno de ventanas. Si nuestro linux es modo texto, al entrar en sesión entramos directamente en una shell.
La shell se abre por defecto en el directorio raíz asignado a nuestro usuario. Vamos a crear un subdirectorio para nuestro programa y meternos en él. El subdirectorio se crea con mkdir y nos metemos en él con cd.
$ mkdir MI_PROGRAMA
$ cd MI_PROGRAMA
Podemos escribir nuestro programa con cualquier editor que conozcamos. El editor estandard para los sistemas unix es el vi. Ahora linux suele venir con versiones mejoradas del vi, como son el vim o el gvim. También suele venir con otros editores, como el xemacs. Puesto que el vi es el estandard que viene con todas las distribuciones de unix, es el que vamos a usar.
La extensión de un programa en c es ".c". Editamos un fichero nuevo HolaMundo.c para escribir en él. El comando es
$ vi HolaMundo.c
Las mayúsculas y minúsculas son importantes, Podemos poner lo que queramos, pero siempre igual a partir de ahora. El editor vi se escribe con minúsculas.
El editar con el vi la shell cambia de aspecto y se llena de "gurruñitos" en la primera columna (muchos de estos ~). Ese es nuestro fichero, que de momento está vacío.
El editor vi tiene dos modos de trabajo: en modo de comandos y en modo de inserción.
En el modo de comandos, cualquier tecla que apretemos se interpreta como un comando, no se escribe. Es decir, si pulso la x, en vez de escribirse una x, lo que se hace es borrar un caracter (es el comando asignado a la x).
En el modo de inserción, los caracteres sí se escriben. Si pulso la misma x de antes, ahora se escribe una x.
Por defecto el vi entra en el modo de comandos. Para pasar al modo de inserción y poder escribir, pulsamos la i (de insertar). Esto nos pone en el modo de inserción y podemos empezar a escribir nuestro programa en c. Puede ser como el siguiente
#include
<stdio.h>
int main()
{
printf ("Hola mundo.\n");
return 0;
}
Si nos equivocamos al escribir, pulsamos la tecla de borrado. Si el error es más gordo, debemos pasar al modo de comandos para corregirlo. Pasamos al modo de comandos pulsando la tecla <escape>. Nos movemos a los caracteres erroneos con las flechas (si no funcionan, debemos usar + para bajar de linea, - para subir una linea, <espacio> para avanzar a la derecha y b para retroceder a la izquierda). Una vez encima del caracter que queremos borrar, pulsamos la x. Para insertar caracteres, ponemos el cursor en el sitio en el que queremos insertar y pulsamos la i que nos mete nuevamente en el modo de inserción y podemos seguir escribiendo.
Una vez terminado el programa, pulsamos <escape> para pasar al modo de comandos y escribimos :wq (un : una w y una q). Esto hace que se salve el fichero y salgamos del editor vi
El editor vi parece complejo de usar, y de hecho lo es cuando se empieza con él. Sin embargo es de los editores más potentes y cómodos que he encontrado cuando se conoce y te acostumbras a él. Ahora programo en windows con los editores típicos de los entornos de desarrollo de windows y echo de menos algunos comandos de vi, además de que el ratón me hace hacer determinadas operaciones más lentamente de lo que puedo hacerlas en vi simplemente pulsando teclas.
Para compilar nuestro programa usamos el comando (compilador) gcc. Si nuestro programa fuera de C++ deberíamos usar el g++
$ gcc HolaMundo.c
Esto compila el programa y produce un ejecutable, si no hay errores, que se llama a.out
Ese nombre no es bonito y tampoco es bonito que mi HolaMundo se llame a.out, que mi juego de marcianos se llame a.out y mi hoja de calculo se llame a.out. Tampoco es bonito tener que cambiarle el nombre al ejecutable después de compilar. Afortunadamente gcc tiene opciones para poder darle al ejecutable el nombre que queramos. La opción es -o NombreQueYoQuiera. Borramos el a.out con el comando rm y volvemos a compilar con la opción -o que sí es bonita.
$ rm a.out
$ gcc HolaMundo.c -o HolaMundo
Ya deberíamos tener el ejecutable HolaMundo
A diferencia de windows, los ejecutables no tienen que terminar en .exe. Linux marca los ejecutables con un atributo del fichero (similar a los atributos de escritura o sólo lectura), y le da igual la extensión que tengan.
Suponemos que para ejecutar nuestro programa basta con poner su nombre
$ HolaMundo
¡Lástima! ¡No funciona!. El motivo es que por seguridad, linux sólo busca ejecutables en determinados directorios. Esos directorios son los que se indican en la variable de entorno PATH. Ni el directorio de nuestro proyecto ni el directorio actual de trabajo están en esa variable (ni deben estar si atendemos a la seguridad). Para ejecutar nuestro programa hay que poner delante el path donde se encuentra. Este path puede ser absoluto o relativo al directorio actual. Vale cualquiera de los siguientes:
$
/home/chuidiang/MI_PROGRAMA/HolaMundo
$ ./HolaMundo
Ya está. Cualquiera de estos dos comandos debería ejecutar nuestro programa y mostrarnos el tan deseado "Hola mundo." (Por supuesto, el /home/chuidiang es dónde está mi directorio como usuario chuidiang. Tú tendrás que poner el tuyo.)
El siguiente paso (opcional de momento, pero obligatorio cuando hagamos cosas más complejas) será entrar en el debugger.