Beruflich Dokumente
Kultur Dokumente
Curso 2003/2004
ndice general
1. Introduccin a Unix 1.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1. Qu es Unix? . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2. El entorno de trabajo: el shell . . . . . . . . . . . . . . . . 1.1.3. Usuarios y grupos . . . . . . . . . . . . . . . . . . . . . . 1.2. Iniciacin a Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1. Entrada y salida del sistema . . . . . . . . . . . . . . . . . 1.3. Estructura del sistema de archivos de Unix . . . . . . . . . . . . . . 1.3.1. Tipos de archivos . . . . . . . . . . . . . . . . . . . . . . . 1.3.2. Enlaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3. El camino o path . . . . . . . . . . . . . . . . . . . . . . . 1.3.4. Estructura del sistema de archivos de Unix . . . . . . . . . 1.3.5. El directorio personal . . . . . . . . . . . . . . . . . . . . . 1.3.6. Permisos . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4. Comandos bsicos de Unix . . . . . . . . . . . . . . . . . . . . . . 1.4.1. Algunos comandos sencillos de Unix . . . . . . . . . . . . 1.4.2. Listado del contenido de directorios: comando ls . . . . . 1.4.3. Creacin de subdirectorios: comando mkdir . . . . . . . . 1.4.4. Borrado de subdirectorios: comando rmdir . . . . . . . . 1.4.5. Cambio de directorio: comando cd . . . . . . . . . . . . . 1.4.6. Situacin actual: comando pwd . . . . . . . . . . . . . . . 1.4.7. Copia de cheros: comando cp . . . . . . . . . . . . . . . 1.4.8. Traslado y cambio de nombre de cheros: comando mv . . . 1.4.9. Enlaces a cheros: comando ln . . . . . . . . . . . . . . . 1.4.10. Borrado de cheros: comando rm . . . . . . . . . . . . . . 1.4.11. Cambio de modo de los cheros: comando chmod . . . . . 1.4.12. Visualizacin sin formato de un chero: comando cat . . . 1.4.13. Visualizacin de cheros pantalla a pantalla: comando more 1.5. Comandos fundamentales del editor vi . . . . . . . . . . . . . . . 1.6. Y despus qu? . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.1. Obtener ms informacin con el manual del sistema . . . .
I
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 1 1 2 2 2 3 3 3 4 4 5 6 6 6 7 7 8 8 8 9 9 9 9 10 10 11 11 11 12 13
II
NDICE GENERAL
2. Guin de prcticas 2.1. Entrando al sistema . . . . . . . . . . . . . . 2.2. Desconexin . . . . . . . . . . . . . . . . . 2.3. Transferencia de cheros . . . . . . . . . . . 2.4. Ejercicios de manejo de cheros y directorios 2.5. Ejercicios de transferencia de cheros . . . . 2.6. Escribiendo el primer programa. . . . . . . . 2.7. Ejecutando el primer programa. . . . . . . . 2.8. Desarrollo . . . . . . . . . . . . . . . . . . . 2.8.1. Esquema general . . . . . . . . . . . 2.8.2. Ejecucin . . . . . . . . . . . . . . . 2.9. Errores . . . . . . . . . . . . . . . . . . . . . 2.9.1. Soluciones drsticas . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
15 15 17 17 18 21 21 23 23 23 24 25 27
Captulo 1
Introduccin a Unix
1.1. Introduccin
La mayor parte de los ordenadores que existen en la actualidad estn diseados de forma que puedan ejecutar diversas tareas o programas. Estos programas pueden ir desde un procesador de textos, a un programa para la animacin de grcos tridimensionales o distintos tipos de juegos. Para su correcto funcionamiento deben ser adems capaces de acceder a las recursos de que dispone el ordenador, como por ejemplo escribir o leer datos en un disco duro, mostrar un grco por pantalla, etc. Es evidente, que si cada programa actuase de una forma independiente, existiran graves problemas y conictos, puesto que, por ejemplo, tendran libertad para escribir sus datos sobre los de otro, etc. Para solucionar este tipo de problemas se desarrollaron los Sistemas Operativos, los cuales aportan unos mecanismos y reglas bsicas de funcionamiento, de forma que los programas puedan acceder a los recursos del ordenador de una forma adecuada. Aunque sta fue la funcionalidad inicial de los sistemas operativos, con el tiempo se han aadido otras muchas, como la ejecucin de programas, el control de la memoria del ordenador, la creacin y control de interfaces grcas de usuario, etc. En la actualidad existen una gran cantidad de sistemas operativos dependiendo del tipo de ordenador en el que se va a ejecutar. Por ejemplo para los PC uno de los sistemas operativos ms difundidos es Microsoft Windows, tanto en las versiones 95, 98, ME, NT 4.0, 2000 y la nueva XP. Otros posibles sistemas operativos para este tipo de ordenadores son Solaris, OS/2, BeOS, Microsoft DOS, o uno de los sistemas operativos ms poderosos y en rpida expansin para PC: Linux.
1.1.1. Qu es Unix?
Unix es un sistema operativo desarrollado en 1970, y una de sus mayores ventajas es que es fcilmente portable a diferentes tipos de ordenadores, por lo que existen versiones de Unix para casi todos los tipos de ordenadores, desde PC y Mac hasta estaciones de trabajo y superordenadores. Al contrario que otros sistemas operativos, como por ejemplo MacOS el sistema operativo de los Apple Macintosh, Unix no est pensado para ser fcil de emplear, sino para ser sumamente exible. Por lo tanto Unix no es en general tan sencillo de emplear como otros sistemas operativos, aunque, se estn realizando grandes esfuerzos 1
para facilitar su uso. Pese a todo la enorme exibilidad de Unix y su gran estabilidad (y el bajo coste, en sus versiones de libre distribucin) han hecho de este sistema operativo una opcin muy a tener en cuenta por aquellos usuarios que se dediquen a trabajar a travs de redes, naveguen por Internet, o se dediquen a la programacin. Linux es un sistema operativo para PC, gratuito y de libre distribucin inspirado en el sistema Unix, escrito por Linus Torvalds con la ayuda de miles de programadores de todo el mundo comunicados a travs de Internet. El futuro de Linux es brillante y cada vez ms y ms gente y ms y ms empresas entre otras IBM, Intel y Corel estn apoyando este proyecto, con lo que el sistema ser cada vez ms sencillo de emplear y los programas sern cada vez mejores.
Por motivos de seguridad la contrasea debe cumplir ciertas condiciones tales como: Contener al menos seis caracteres. Contener al menos un carcter numrico o especial y dos alfabticos. Ser diferente del nombre de login. La primera vez que se accede al sistema la contrasea empleada ser la proporcionada por el administrador del sistema. Existen diversas formas para terminar la sesin de trabajo en Unix, dependiendo de si estamos en modo grco o de texto. En modo texto: Presionar las teclas <ctrl> d Escribir el comando exit
Pese a esto Unix slo distingue tres tipos de archivos: Archivos o cheros ordinarios, son los mencionados anteriormente. Directorios (o carpetas), es un archivo especial que agrupa otros cheros de una forma estructurada. Archivos especiales, son la base sobre la que se asienta Unix, puesto que representan los dispositivos conectados a un ordenador, como puede ser una impresora. De esta forma introducir informacin en ese archivo equivale a enviar informacin a la impresora. Para el usuario estos dispositivos tienen el mismo aspecto y uso que los archivos ordinarios.
1.3.2. Enlaces
Los enlaces son un tipo de archivo ordinario cuyo objetivo es crear un nuevo nombre para un archivo determinado. Una vez creado el enlace simblico ste permite acceder al chero que enlaza de igual modo que si se hubiera copiado el contenido del mismo a otro chero, con la ventaja de que este realmente no se ha copiado. Los enlaces simblicos son especialmente tiles cuando se quiere que un grupo de personas trabajen sobre un mismo chero, puesto que permiten compartir el chero pero centralizan las modicaciones. Como ejemplo se puede suponer la existencia de un chero llamado balance.2001.txt, al cual, se le se crea un enlace simblico con el nombre balance.txt. Cualquier acceso a balance.txt es traducido por el sistema de forma que se accede al contenido de balance.2001.txt.
dev
usr
home
etc
pedro
luis
Carta.txt
Carta2.txt
El directorio actual, representado por el punto . El directorio padre representado por dos puntos .. Estando en el directorio /home/pedro se puede acceder a Carta.txt con /home/luis/Carta.txt (camino absoluto) o bien ../luis/Carta.txt (camino relativo). Estando en el directorio /home/luis se accede mediante ./Carta.txt o simplemente Carta.txt.
/dev Contiene cheros del sistema representando los dispositivos que estn fsicamente instalados en el ordenador. /etc Este directorio esta reservado para los cheros de conguracin del sistema. En este directorio no debe aparecer ningn chero binario (programas). /lib Contiene las libreras necesarias para que se ejecuten los programas que residen en /bin (no las libreras de los programas de los usuarios). /proc Contiene cheros especiales que o bien reciben o envan informacin al kernel del sistema (se recomienda no modicar el contenido de este directorio y sus cheros).
/usr Este es uno de los directorios ms importantes del sistema puesto que contiene los programas de uso comn para todos los usuarios. /var Este directorio contiene informacin temporal de los programas (lo cual no implica que se pueda borrar su contenido, de hecho, no se debe hacer!).
1.3.6. Permisos
Unix, mantiene un sistema de permisos de acceso a los cheros muy estricto, a n de controlar qu es lo que se puede hacer con ellos, y quin lo puede hacer. Estos permisos se identican con letras y son: r permiso de lectura el chero. w permiso de escritura en el chero. x permiso de ejecucin del chero. s permiso para cambiar el propietario del chero. Al contrario que en Windows o MS-DOS los programas ejecutables de Unix no estn marcados por una determinada extensin (.exe) sino por un atributo, el permiso de ejecucin x. Si se elimina este atributo a un programa, Unix no ser capaz de ejecutarlo. A su vez cada uno de estos permisos se aplica: al dueo del chero (u), al grupo de usuarios al que pertenece el dueo (g), al resto de usuarios (o). As un chero determinado puede tener permiso para ser ledo, escrito y ejecutado por su dueo, ledo y ejecutado por el grupo al que pertenece y no tener ningn tipo de acceso para los dems usuarios. Como se puede entender este tipo de mecanismo es especialmente til cuando se trabaja en grupo en un determinado proyecto.
/sbin
En su forma ms habitual (los shells de Bourne o de Korn), el sistema operativo utiliza un signo de $ como prompt para indicar que est preparado para aceptar comandos, aunque este carcter puede ser fcilmente sustituido por otro u otros elegidos por el usuario. En el caso de que el usuario acceda como administrador este signo se sustituye por #.
date
cal 1949
cal 5 1949
who Indica qu usuarios tiene el ordenador en ese momento, en qu terminal estn y desde qu hora.
whoami
man [comando] Todos los manuales de Unix estn dentro del propio sistema operativo, y este comando permite acceder a la informacin correspondiente al comando comando. Por ejemplo con man who aparecer por pantalla y de forma formateada por pginas, la explicacin del comando who. Se puede navegar a travs de estas pginas con los cursores del teclado, la barra espaciadora avanza una pgina, el retorno de carro avanza una lnea y presionando la tecla q se sale. clear Este comando limpia la consola ("borra la pantalla").
Las opciones anteriores pueden combinarse. Por ejemplo: ls -la muestra el contenido del directorio en formato largo incluyendo los cheros ocultos. El comando ls admite los caracteres de sustitucin o metacarcteres * y ?. El carcter * representa cualquier conjunto o secuencia de caracteres. El carcter ? representa cualquier carcter, pero slo uno. Por ejemplo: ls *.gif muestra todos los nombres de cheros que acaben en .gif, por ejemplo dib1.gif, a.gif, etc. . . ls file? muestra todos los cheros cuyos nombres empiecen por file y tengan un nombre de cinco caracteres, por ejemplo: file1, file2, fileA, etc. . .
ls -l [filename]
ls [subdir]
ls -r
ls -t
Se muestra ordenando por da y hora de modicacin. Se muestra el directorio y lo ordena en orden inverso. Se muestra el contenido del subdirectorio subdir. Se muestra toda la informacin sobre el chero filename.
10
11
Por ejemplo, para quitar el permiso de lectura a los usuarios de un chero el comando es chmod a -r fichero.txt Los permisos de lectura, escritura y ejecucin tienen un signicado diferente cuando se aplican a directorios y no a cheros normales. En el caso de los directorios el permiso r signica la posibilidad de ver el contenido del directorio con el comando ls; el permiso w da la posibilidad de crear y borrar cheros en ese directorio, y el permiso x autoriza a buscar y utilizar un chero concreto.
12
Borrado de texto. Borra el carcter bajo el cursor Borra la linea bajo el cursor Borra la palabra bajo el cursor
Salida del editor. Escribe en el disco el contenido actual del chero Abandona el editor (solicitando conrmacin de grabado) Abandona el editor (fuerza al editor a salir sin grabar) Abandona el editor tras grabar Otros comandos. Refresca la pantalla Informa sobre el nmero de linea actual y nombre del chero
Gran parte de los comandos de vi admiten la repeticin. As por ejemplo si deseamos borrar 10 espacios el comando se escribe como 10x. Esto puede crear problemas si, por ejemplo, tecleamos inadvertidamente un nmero, digamos 100, seguido del comando i y procedemos a insertar un texto en el chero. Al salir del modo de insercin todo el proceso se repetir 100 veces!
13
14
Captulo 2
Guin de prcticas
2.1. Entrando al sistema
En primer lugar deberemos encender el ordenador y el monitor (los interruptores aparecen claramente identicados en el frontal del equipo). Tras posiblemente una serie de mensajes de arranque se ver una pantalla solicitando una contrasea de red. Pulsar con el ratn el botn aceptar, sin escribir ninguna contrasea. Ahora aparecer una pantalla Windows TM en la que se ver un icono (ver gura 2.1) con la palabra putty.exe debajo. Pulsando dos veces la tecla izquierda del ratn sobre l, aparecer una pantalla de conexin a equipo remoto (ver gura 2.2).
El equipo utilizado en estas prcticas se llama saturno y su direccin en Internet es saturno.dcs.eup.uva.es. Para conectar con l, hay que introducir en el cuadro de dilogo la direccin en el campo Host Name, eligiendo el protocolo SSH (ver gura 2.2). A continuacin aparecer una pantalla similar a la recogida en la gura 2.3. Es la pantalla de conexin con el sistema, en la que nos tendremos que identicar como usuarios. La identicacin de un usuario ante el sistema se realiza mediante dos palabras, nombre de usuario (login) y contrasea (password), que previamente nos habr proporcionado el administrador del sistema. Teclearemos entonces nuestro login y return , y a continuacin nuestro password y return . Por motivos de seguridad al teclear el password no lo vemos reejado en pantalla. Tanto si el login es incorrecto como si el error se produce en el password, el sistema contestar: 15
16
Login incorrect
y volver a solicitarnos ambos datos. En caso contrario acabamos de entrar en saturno. A partir de este momento saturnoespera a que tecleemos un comando terminado por return para ejecutarlo.
2.2. DESCONEXIN
17
2.2. Desconexin
Al terminar la sesin de trabajo deberemos abandonar el sistema. El comando que permite hacerlo es exit Tras realizar correctamente la desconexin, deberemos apagar el ordenador, siguiendo el proceso de desconexin de Windows TM : pulsar el botn Inicio, opcin Apagar el sistema y esperar a que en la pantalla aparezca el mensaje avisando de que se puede apagar el ordenador.
Los comandos ms importantes son los siguientes: open: abre la conexin con una mquina remota. cd: cambia el directorio de trabajo en la mquina remota. dir: lista los contenidos del directorio de trabajo de la mquina remota. get: descarga un chero de la mquina remota a la mquina local. put: copia un chero de la mquina local a la mquina remota. bye: naliza la conexin SFTP.
18
2.- Cree otro subdirectorio que se llame documentos en su directorio personal. Comando
3.- Copie los cheros que comienzan por carta y que se encuentran en el directorio /docencia/ITT en el subdirectorio documentos Comando
4.- Copie los cheros que terminan por .txt y que se encuentran en el directorio /docencia/ITT en el subdirectorio ejerciciosUNIX Comando
8.- Visualice el contenido del directorio, de forma que slo aparezcan los nombre de los cheros. Comando
9.- Vuelva a visualizar el contenido del directorio, pero esta vez deben de aparecer los nombres de los cheros, sus permisos, fechas,. . . (formato largo). Comando
10.- Borre el chero ej1.txt de tal forma que se conrme el borrado del mismo.
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
19
Comando
11.- Elimine todos los permisos de escritura del chero ej2.txt Comando
12.- Visualice el contenido del directorio en formato largo y compruebe que se han denegado dichos permisos. Comando
13.- Intente eliminar el chero ej2.txt, Unix no debe permitir que lo borre. Comando
17.- Intente eliminar el subdirectorio ejerciciosUNIX, Unix no le permitir borrarlo porque no est vaco. Comando
18.- Elimine el chero ej3.txt que se encuentra en el subdirectorio ejerciciosUNIX sin cambiar de directorio. Comando
20.- Visualice el contenido del subdirectorio documentos sin entrar a l y en formato largo. Comando
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
20
21.- Elimine el chero carta1 que se encuentra en el subdirectorio documentos sin entrar a dicho subdirectorio. Comando
22.- Cambie el nombre del chero carta2 que se encuentra en el subdirectorio documentos sin entrar a dicho subdirectorio. El nuevo nombre que debe dar al chero ser nueva_carta Comando
23.- Mueva el chero nueva_carta a su directorio de trabajo donde se debe de encontrar ahora sin entrar a dicho subdirectorio. Comando
25.- Visualice sin ningn formato especial el contenido de chero carta3 que se encuentra en el subdirectorio documentos sin entrar a dicho subdirectorio. Comando
26.- Visualice pantalla a pantalla el contenido del chero carta3 que se encuentra en el subdirectorio documentos sin entrar a dicho subdirectorio. Comando
27.- Borre el archivo carta3 que se encuentra en el subdirectorio documentos sin entrar a dicho subdirectorio. Comando
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
_____________________________________________
21
3.- Cree una copia del chero con el nombre ejemplo2.txt. Comando
4.- Empleando vi, modique el chero ejemplo2.txt, de modo que el contenido sea el siguiente: #include <stdio.h> main() { printf("Hola Mundo\n"); printf("Esto es un programa en C\n"); printf("Adios!!\n"); } 5.- Transera el chero ejemplo2.txt a la mquina local. Comando
6.- Compruebe mediante el bloc de notas que el contenido de dicho chero es el esperado.
_____________________________________________
_____________________________________________
_____________________________________________
22
Figura 2.6: Primer programa en C #include <stdio.h> main() { printf ("Hola! \n"); }
en nuestro caso: vi primero.c obteniendo en pantalla algo como lo recogido en la gura 2.5. Esto quiere decir que el editor vi est activo y que podemos comenzar a escribir nuestro programa. Para ello tecleamos i, que no aparecer en pantalla, y comenzamos a copiar textualmente el contenido de la gura 2.6 utilizando return para saltar de una linea a otra. Para terminar la edicin basta teclear esc seguido de :wq El editor vi tiene dos modos de trabajo: el modo comando, en el que estamos al comenzar la edicin, y el modo de insercin 1 , al que hemos pasado mediante el comando i. Al pulsar esc regresamos del modo de insercin al modo comando con lo que podemos utilizar comandos como los recogidos en la seccin 1.5 . Hay que sealar que el vi no reconoce las teclas especiales de borrado, insercin,. . . de nuestro teclado, pero s las teclas de direccin (echas), . . . , siempre que estemos en el modo comando.
1
23
2.8. Desarrollo
La gura 2.74 muestra el esquema de trabajo que debe seguirse en el desarrollo de programas C en entorno Unix. Ejercicio 1 (Preparacin) Crea un directorio para trabajar con este guin (por ejemplo, Dia1). Establcelo como directorio de trabajo (cd ...). Copia en l todos los archivos con extensin .c del directorio /docencia/ITT .
2.- Complalo. (gcc hola.c) (Con la opcin -v, se podr ver la evolucin del proceso). 3.- Cul es el tamao de hola.c? Y el de a.out?
2
El ms estpido de ellos es olvidar aadir .c al nal del nombre del chero No es gran cosa, es cierto, pero slo es el primer programa. 4 Llanos Ferraris, Diego, Curso de C bajo Unix, International Thomson Learning. Paraninfo, Madrid, 2001
3
24
Anlisis
Diseo
Traduccin a cdigo C
Compilacin cc
Enlace
Compilacin
Preproceso
Figura 2.7: Desarrollo de programas. 4.- Ejectalo (./a.out) Cuando sea necesario conservar un ejecutable, puede renombrarse a.out (mv) o, directamente, indicar al compilador que le d un nombre concreto mediante la opcin -o nombre_del_ejecutable. As gcc -o cospi cospi.c -lm
2.8.2. Ejecucin
El programa nalmente se ejecuta, como se ha visto, simplemente escribiendo el nombre del ejecutable. Entonces se leern las entradas y el programa proporcionar las salidas. Por defecto, las entradas se suponen de teclado, y las salidas se proporcionan por pantalla, pero en ocasiones es conveniente enviar la salida a otro dispositivo. Esto es lo que se conoce como redireccin. Por ejemplo: ./a.out >salida.txt har que la salida que antes obtenamos en la pantalla se escriba en un nuevo chero editable salida.txt mientras que ./a.out >> salida.txt aadir la salida de a.out al nal de salida.txt Ejercicio 3 Comprueba el resultado de la redireccin. Es decir, edita el chero salida.txt. Qu ha pasado?
2.9. ERRORES
25
2.9. Errores
Durante todo el proceso pueden cometerse errores. Los errores de edicin, como errores al pulsar teclas, son responsabilidad del editor, y se advierten durante este proceso. Nos ocuparemos ahora de los errores de fases posteriores, es decir los que se producen en la fase de compilacin, o los que se detectan en la fase de pruebas, que pueden ser debidos a diferentes razones. Ejercicio 4 Lee el chero media1.c. Sin modicarlo, complalo. Observa el mensaje de error. En qu fase se ha producido el error? En qu lnea est? Corrgelo. Compila nuevamente. Observa el resultado. Cuntos errores se detectan? Corrige el primero de ellos. Compila otra vez. Corrige el ltimo error (el de la B. Como sabes, para C, las minsculas y maysculas son distintas, as que B est sin denir. Se debi escribir b. Compila. Cuntos errores?. Corrige. Qu fase detect estos ltimos errores? Finalmente el programa es sintcticamente correcto. Compila y ejectalo. Calcula bien la media?. Qu tipo de error se produce ahora? Quin puede detectarlo? Con frecuencia, el proceso de localizacin e interpretacin de errores es complicado. A veces ello se debe a que un error que se produce en determinado lugar del cdigo, o del proceso, no se detecta hasta un lugar o un momento posterior. Ejercicio 5 Compila pi.c. Observa dnde se ha detectado el error. Puedes explicarlo?. Tambin es frecuente que un error, quizs simple, produzca como consecuencia una serie de errores en cascada. Otra razn que puede dicultar el proceso de localizacin de errores es que el texto del programa sea difcil de leer. Ejercicio 6 Copia y compila media2.c Mira el programa fuente. (vi cat) No es fcil de ver. Ejecuta cb media2.c (cb quiere decir C beautifier y admite algunas opciones. Muestra el resultado por pantalla, de modo que a lo mejor resulta ms cmodo redireccionar su salida). Corrige el primer error y vuelve a compilar. Qu ha pasado con los dems?
26
cb puede ser una ayuda, pero no debe sustituir a la buena escritura de programas. Los mensajes de error que proporciona el compilador pueden ser de dos tipos: errores propiamente dichos (errors) o avisos (warnings). En el segundo caso, se crear el chero ejecutable, pero avisando de que hay algo poco recomendable . Conviene prestar atencin tambin a los avisos. Ejercicio 7 Compila media3.c Haciendo caso omiso del aviso, ejecuta el resultado (a.out) Corrige el error. Ya haba aparecido antes algo parecido. Tambin puede ocurrir que un error no llegue a detectarse, porque lo compiladores no siempre son sucientemente listos. Por ejemplo, en el programa del siguiente ejercicio, algunos compiladores detectaran el error, pero ste no es capaz. Ejercicio 8 Compila y ejecuta media4.c. Por qu se produce el error? Corrgelo. Veamos an otro error que no detecta el compilador, porque es un error de diseo. Ejercicio 9 Compila, ejecuta y corrige media5.c. Todava usaremos el clculo de la media para para practicar un poco. Ejercicio 10 Compila, etc. media6.c y media7.c. Con programas algo mayores, es frecuente que el informe de errores exceda el tamao de la pantalla. En este caso, habr que redireccionar o ltrar, no la salida del compilador, sino la salida de error, que se enva al dispositivo 2, por ejemplo escribiendo la orden gcc media6.c 2>errores.txt que generar el nuevo chero errores.txt donde se almacenar toda la informacin suministrada, y se podr estudiar con detalle. Finalmente, existen errores de ejecucin. Ocurren cuando, durante la ejecucin, el proceso no puede continuar. Se genera entonces un chero core que ser necesario borrar. Ejercicio 11 El programa media8.c quiere calcular la media de tres enteros ledos por teclado. Comprueba y corrige. En esta prctica se ha pretendido ayudar a entender el proceso de compilacin y las muchas posibilidades de errores que pueden producirse a lo largo de todo el proceso. La forma de desarrollar programas conables requiere realizar cada fase de las del dibujo inicial cuidadosamente. En primer lugar un anlisis y diseo slidos, acompaados de una batera de pruebas para realizar con el producto nal. Durante el desarrollo puede ser til insertar en el cdigo sentencias que muestren variables intermedias para poder seguir el proceso en sus partes ms complejas, especialmente cuando hay bucles, y eliminar estas sentencias cuando el programa est depurado. Adems, en el caso de escribir un bucle innito, la insercin de estas sentencias permitir detener la ejecucin, pulsando la combinacin <ctrl>C. Para la bsqueda de errores en tiempo de compilacin existen algunas reglas muy tiles:
2.9. ERRORES
27
No modicar nunca el programa sin reexionar sobre las causas del error, ni ensayar soluciones arbitrarias. Leer el mensaje de error. Leer el mensaje de error. (Esta lnea no es un error) En resumen, conviene reexionar en que, durante el desarrollo de un programa, puede haber: errores en el anlisis. errores de diseo. errores de codicacin. errores en la trascripcin (edicin). errores de compilacin (preproceso, compilacin, enlace). errores de ejecucin. errores en el resultado. y que estos errores no siempre se detectan en la fase en la que se cometen. La mejor defensa contra los errores es la realizacin cuidadosa de cada fase y la depuracin de cada una de ellas segn se va realizando.