Universidad Autónoma Metropolitana - Azcapotzalco Utilización del Sistema Operativo Unix Prof. Hugo Moncayo López Tabla de Contenido 6.5.1 6.5.2 6.5.3 1. Introducción........................................ Leer y salvar archivos............ Sustituciones globales........... Variables de vi..................... 2. Entrada al sistema............................... 7. Uso del compilador de Lenguaje C.... 3. Salir del sistema.................................. 7.1 Compilación simple..................... 7.2 Sólo compilación.......................... 7.3 Generación de un ejecutable con varios objetos......................................... 4. Comandos varios................................ 4.1 Sistema de ayudas........................ 4.2 Sistema de archivos...................... 4.2.1 ls Lista contenido de un directorio........................................... 4.2.2 mkdir crear un directorio............... 4.2.3 cd Cambiar el directorio actual........ 4.2.4 rmdir Elimina un directorio........................................... 4.2.5 rm Elimina archivos............ 4.2.6 mv Mover archivos.............. 4.2.7 Tips........................................ 8. Depuración de un programa................ 8.1 Establecer puntos de interrupción 8.2 Inicio de la ejecución................... 8.3 Revisar el contenido de las variables................................................. 8.4 Ejecución paso a paso (sin entrar a las funciones)....................................... 8.5 Ejecución paso a paso (entrando a las funciones)....................................... 8.6 Detección de puntos de falla........ 8.7 Manual de referencia de gdb........ 9. Ejecución del programa...................... 5. Desarrollo de programas..................... 9.1 Lectura de datos de un archivo.... 9.2 Escritura de resultados en un archivo.................................................... 9.3 Impresión de programas y resultados............................................... 9.4 Preparación para impresión.......... 6. Uso del editor vi.................................. 6.1 Inicio de vi................................... 6.2 Modos de operación de vi............ 6.3 Comandos de pantalla.................. 6.3.1 Corrimientos de la pantalla.... 6.3.2 Movimientos del cursor......... 6.4 Pasar a modo de entrada de texto. 6.4.1 Modificación de texto............ 6.4.2 Copia y pegado...................... 6.4.3 Comandos miscelaneos......... 6.5 Comandos de línea de comandos. 1 10. Utilería make................................... 11. Utilería tar........................................ 12. Compresión de archivos.................. programa ejecutable . 1.Introducción 3.Salir del sistema Esta guía está elaborada para que los alumnos del curso de Introducción a la programación que por primera vez se enfrentan a la necesidad de desarrollar programas en Lenguaje C en el ambiente UNIX tengan a la mano los principales comandos para manejar archivos en su cuenta, editar sus programas fuentes y datos, compilar y depurar sus programas e imprimir sus resultados. Esta guía no es un manual de referencia. Para salir del sistema, a una petición del sistema se responde con la combinación Ctrl-d y retorno. 4.Comandos varios A continuación se presentan algunos comandos de uso común que son los más necesarios para utilizar el sistema operativo. Unix es un sistema operativo multiusuario. Esto significa que varias personas pueden usar la computadora concurrentemente desde terminales interactivas o desde computadoras personales conectadas a la red. 4.1Sistema de ayudas Para obtener en la pantalla el manual de un comando se usa el comando man. Esto nos permite la consulta de la documentación de cualquier comando. ejemplo: En estas notas el texto que escribe la computadora se presenta en caracteres courier normal y la respuesta del usuario se presenta en courier en negritas. $ man vi 2.Entrada al sistema Con el comando anterior se presenta en la pantalla el manual del comando vi (editor de textos). Cuando se prende la terminal aparece una petición (“prompt”) del sistema a la que se responde con la clave del usuario: En la pantalla aparece la primera página. comando que acepta man son: login: alpa326 espacio delete Ctrl-B A continuación aparece la petición de la contraseña del usuario: Los Avanza una página Salir de man Retrocede una página Con el comando man se pueden consultar también las fucniones de la bilbioteca estándar del Lenguaje C como: password: x32jh88a Al teclear la clave del usuario y la contraseña se deben teclear exactamente como se proporcionaron estos datos, respetando las mayúsculas y las minúsculas. No se deben hacer correcciones. El sistema proporciona tres oportunidades para introducir estos datos. $ man printf 4.2Sistema de archivos El sistema de archivos de UNIX es una estructura arbolada de directorios en donde el directorio raíz es: Cuando se han introducido correctamente la clave y contraseña el sistema proporciona un mensaje de bienvenida y al fina presenta una petición para que usuario comience a introducir comandos. / $ cada nivel puede tener archivos y directorios. En este momento el usuario puede teclear el nombre de un comando o el nombre de un Una trayectoria es una cadena de nombres de directorios separados por diagonales y puede terminar con el nombre de un directorio o un 2 archivo. $ cd /usr/lib Si una trayectoria empieza con diagonal, la trayectoria se toma a partir del directorio raíz o principal del sistema de archivos. establece como directorio actual el directorio lib que se encuentra en el directorio usr que se encuentra en el directorio raíz. /usr/include/system Si la trayectoria empieza con un nombre, entonces parte del directorio actual. 4.2.4rmdir Elimina un directorio proyecto/fuentes Para eliminar un directorio el directorio debe estar vacío. 4.2.1ls Lista contenido de un directorio $ rmdir prueba Listar el contenido del directorio actual Elimina el directorio prueba que se encuentra en el directorio actual. $ ls Listar el contenido incluyendo sus detalles del directorio 4.2.5rm Elimina archivos actual Este comando nos permite eliminar uno o varios archivos. Ejemplos: $ ls -l Elimina todos los archivos objeto del directorio actual Listar el contenido de un directorio con trayectoria a partir del directorio raíz, incluyendo sus detalles $ rm *.o $ ls -l /usr/include/system Elimina el archivo listado.lst que se encuentra en el directorio reportes que a la vez se encuentra en el directorio actual. Listar los nombres de los programas C que se encuentran el directorio fuentes. $ rm reportes/listado.lst $ ls fuentes/*.c 4.2.6mv Mover archivos 4.2.2mkdir crear un directorio Este comando nos permite cambiar de directorio uno o varios archivos o directorios. Ejemplos: Crear un directorio en el directorio actual Mover el archivo lista.lst que se encuentra en el directorio actual al directorio reportes con el nombre datos.lst $ mkdir fuentes Se crea el directorio fuentes en el directorio actual. $ mv lista.lst reportes/datos.lst Mover el archivo listado.lst al directorio reportes con el mismo nombre. (cuando el origen es un archivo y el destino es un directorio el archivo se mueve a ese directorio con el mismo nombre) 4.2.3cd Cambiar el directorio actual Cambiar al directorio fuentes que se encuentra en el directorio actual. $ mv listado.lst reportes $ cd fuentes Cuando el origen y el destino son ambos directorios, el directorio origen se mueve con todo su contenido al directorio destino. En el siguiente Cambia al directorio fuentes que se encuentra en el directorio actual. 3 ejemplo se mueve todo el directorio fuentes con su contenido al directorio proyecto_terminal e).- Preparar con el editor los datos de prueba. f).- Probar el programa. Si el programa no funciona como esperamos, entonces se revisa y se realizan las correcciones. g).- Si se dificulta encontrar los errores del programa se puede realizar una corrida de depuración usando el depurador gdb. Este programa permite ejecutar paso a paso el programa y conocer y modificar el valor de las variables. h).- Si después de todo esto no se localizan los errores del programa se puede acudir a asesoría con el profesor o el ayudante. $ mv fuentes proyecto_terminal El comando mv se puede usar para cambiar de nombre a un archivo. Esto se logra si el archivo destino se encuentra en el mismo directorio que el archivo fuente. En el siguiente ejemplo el archivo a.out se le cambia el nombre por mi_editor: $ mv a.out mi_editor 4.2.7Tips Para poder repetir la ejecución de los comandos anteriores en el sistema acordeon, es necesario ejecutar el siguiente comando: $ 6.Uso del editor vi set -o vi El editor vi es un editor de pantalla, es decir, nos permite ver una página del archivo que estamos editando. Aunque existen otros editores bajo el sistema operativo Unix es conveniente estar familiarizado con vi porque es el que siempre encontramos disponible en todos los sistemas UNIX. Después de esto, cada vez que se desea volver a ejecutar algún comando previo se teclea ESC-k. Cada ves que tecleamos ESC-k la pantalla nos muestra el comando anterior. En la línea de comandos podemos hacer modificaciones utilizando los comandos del editor vi (ver 6). 5.Desarrollo de programas El editor vi es muy poderoso pero no es nada amigable, ya que no proporciona ningún tipo de ayudas interactivas, ni cuenta con interfaces modernas como menús ni cuadros de diálogo. Para usarlo cómodamente es necesario memorizar sus comandos. El desarrollo de un programa consiste básicamente en editar el programa fuente con algún editor como vi o pico. El programa se compila con el comando g++ con lo que se genera el programa ejecutable y finalmente se ejecuta tecleando como comando el nombre del programa ejecutable. En este documento sólo se describen las funciones más usuales. Para una mayor información consulte el manual de vi. Los pasos para el desarrollo de programas son los siguientes: a).- Desarrollar el algoritmo usando una herramienta como español estructurado. b).- Codificar el programa en un lenguaje de programación como C o C++. 6.1Inicio de vi El vi debe trabajar con una variedad de terminales y para que opere correctamente es necesario pasarle el modelo de terminal con el que vamos a trabajar. Esto se hace definiendo una variable de ambiente con los siguiente comandos: c).- Editar los archivos que contienen el programa con un editor como vi o pico. $ TERM=vt100 $ export TERN d).- Compilar el programa con el compilador gcc o g++ (para C o C++ respectivamente) y eliminar los errores que reporta el compilador. en el ejemplo anterior se definió para vi como terminal el modelo vt100 que es el más usual y que también es el adecuado cuando usamos un emulador de terminal en una PC. 4 Para verificar el modelo de terminal definido en la variable de ambiente TERM se ejecuta el comando: $ echo $TERM ^d ^e ^b ^u ^y Para iniciar el editor vi se ejecuta el siguiente comando: 6.3.2Movimientos del cursor $ vi tarea.c h j k l $ 0 % Con el comando anterior se inicia la edición del archivo tarea.c el cual si no existe se crea y si ya existe se permite modificar. 6.2Modos de operación de vi vi opera en tres modos diferentes: a).- modo comando de pantalla, modo de entrada y modo comando de línea. Al iniciar vi se encuentra en modo de comando de pantalla. ^ nl B E nG En modo de comando de pantalla cualquier carácter que teclee el usuario se tratará de interpretar como comando; en este modo no se ven los comandos que tecleamos, solamente percibimos su efecto. Retrocede el cursor Siguiente línea Línea anterior Adelante Final de la línea Principio de la línea Mover el cursor al paréntesis, corchete o llave que cierra el actual. Ir al siguiente carácter no espacio Colocar el cursor en la columna n Retroceder una palabra Avanzar una palabra Ir a la línea n 6.4Pasar a modo de entrada de texto Con estos comandos se pasa de modo comando de pantalla a modo de entrada, es decir, el sistema permitirá que se introduzcan caracteres que se incorporarán al archivo en el punto en que se encuentra el cursor. En todos estos comandos el cursor se coloca en cierta posición y el sistema queda listo para inserción de texto en el archivo. Cuando el modo de entrada se encuentra activo los caracteres que tecleamos se agregan al archivo en el punto en donde se encuentra el cursor. En el modo de comando de línea, el cursor se coloca en la última línea de la pantalla y nos permite teclear un comando en esta línea, el comando se ejecuta cuando oprimimos “entrar”. vi no nos da ninguna indicación para saber si nos encontramos en modo de comando de pantalla o modo de entrada. i I A a o O En donde esta el cursor Al principio de la línea Al final de la línea Antes del cursor Agrega una nueva línea debajo del cursor Agrega nueva línea antes del cursor Para dar por terminado el modo de entrada y regresar a modo de comando de pantalla se oprime la tecla de ESC. 6.3Comandos de pantalla La mayoría de los comandos de pantalla son de una sola letra y pueden ser precedidos de un número que indica cuantas veces se va a repetir el comando. Por ejemplo el comando dd borra la línea en donde se encuentra el cursor; si deseamos borrar cinco líneas a partir del cursos tecleamos 5dd. En ningún momento vemos los símbolos que constituyen el comando. 6.4.1Modificación de texto x Elimina el carácter en la posición del cursor. r Reemplaza el carácter de la posición del cursor. En seguida debemos teclear el carácter que reemplaza. R Inicia reemplazo de texto. A continuación, el texto que tecleamos sustituye al que existe en el archivo. C Reemplaza el texto desde el cursor hasta el final de la línea con el nuevo 6.3.1Corrimientos de la pantalla ^f Avanza media página Avanza una línea Retrocede una página Retrocede media página Retrocede una línea Avanza una página 5 D S dd J texto. Elimina el texto desde el cursor hasta el final de la línea. Elimina el texto de la línea actual y permite la entrada de nuevo texto. Elimina la línea en donde esta el cursor. Pega la línea actual a la siguiente. de textos con expresiones regulares y otra serie de facilidades (ver el manual de ex). Para ejecutar un comando de ex debemos estar en modo de comando de pantalla. vi reconoce que se trata de un comando de línea por el primer carácter, usualmente dos puntos “:” o una diagonal “/”. 6.4.2Copia y pegado 6.5.1Leer y salvar archivos Copiar y pegar significa copiar el contenido de algunas líneas de texto en un buffer para después insertarlas en otro lugar del archivo o en otro archivo. vi cuenta con un buffer anónimo y con buffers con nombre. El buffer anónimo solamente se usa cuando la operación de pegado se realiza inmediatamente después de la operación de copiado. :w :w arch :wq :q! :e arch Uso del buffer anónimo nY p Se copian en el buffer anónimo n líneas a partir de la posición del cursor. Las líneas contenidas en el buffer anónimo se insertan por debajo de la línea en donde se encuentra el cursor. :e! 6.5.2Sustituciones globales :s/cad1/cad2/ Uso de los buffer con nombre n”bY n”bp Se salva el archivo en el mismo archivo que se abrió al iniciar su edición. El archivo editado se salva el archivo “arch”. El archivo se salva y salimos de vi. Salimos de vi sin salvar el archivo (se pierden todos los cambios) Se carga para editar el archivo “arch”. Si el archivo que se estaba editando no se ha salvado no se realiza la operación. Igual que el comando anterior pero las modificaciones del archivo que se estaba editando se pierden. Sustituye la primera ocurrencia de la cadena “cad1” por la cadena “cad2” en la línea actual. Se copian en el buffer b n líneas a partir de la línea en donde se encuentra el cursor. b Puede ser cualquier letra. La información permanece en el buffer hasta que salimos de vi o hasta que introducimos otro contenido en el mismo buffer. Las líneas contenidas en el buffer b se insertan por debajo de la línea en la que encuentra el cursor. :s/cad1/cad2/g Similar al anterior pero sustituye todas las ocurrencias de la cadena “cad1” por la cadena “cad2”. :12,25s/cad1/cad2/g 6.4.3Comandos miscelaneos Lo mismo que el comando anterior pero la sustitución se realiza en las líneas 12 a 25 del archivo. ^G :1,$s/cad1/cad2/g Lista en la última línea de la pantalla el nombre del archivo que estamos editando y el número de la línea en la que se encuentra el cursor. Lo mismo que el comando anterior pero la sustitución se lleva a cabo en todas las líneas del archivo. 6.5Comandos de línea de comandos 6.5.3Variables de vi El editor vi tiene capacidad de ejecutar los comandos del editor ex. Estos comandos nos permiten realizar cambios globales, localizaciones vi maneja una serie de variables internas que le permiten al usuario controlar su funcionamiento. 6 Por ejemplo el manejo de la auto sangrado, colocación de tabuladores, embellecimiento del programa, etc. En particular resulta muy útil que vi numere las líneas en la pantalla. Esto nos facilita encontrar los errores que nos reporta el compilador, ya que éste nos proporciona el número de la línea en donde ocurrió el error. Para que vi presente los números de las líneas se ejecuta el siguiente comando: $ gcc ordena.c -o ordena Todas las compilaciones en este curso vamos a usar esta opción. Al detectar un nombre de archivo con terminación .c el compilador procede a compilar ese archivo. El switch -o le indica al sistema que el módulo ejecutable se llamará ordena (sin terminación), si la compilación tiene éxito el ejecutable quedará con este nombre. :set number 7.2Sólo compilación Revise el manual de vi para conocer otras opciones. Para que el compilador no intente generar un módulo ejecutable se usa el swuitch -c. De esta manera podemos realizar una compilación para generar un módulo objeto. Ejemplo: 7.Uso del compilador de Lenguaje C En Unix existe un solo comando para compilar y encadenar programas, se trata del comando gcc. El comando cc procesa una variedad de tipos de archivos, los distingue por su terminación. Para el propósito de nuestro curso nos interesan los siguientes tipos de archivos: .c .o .a .cc $ gcc -c lect.c -o lect.o Con el comando anterior se compila el módulo fuente lect.c y se genera el objeto lect.o 7.3Generación de un ejecutable con varios objetos Son los módulos fuente escritos en lenguaje C. Debemos crear los módulos C con esta terminación. Son los módulos objeto resultantes de la compilación de un módulo fuente. Un módulo objeto no puede ser ejecutado, este debe combinarse con otros módulos objetos y módulos de librería para generar un módulo ejecutable. Es la terminación que se da a las librerías. Las librerías nos sirven para almacenar módulos objetos de uso común. Programas fuente escritos en C++. Para ligar varios objetos se usa un comando como sigue: $ gcc ordena.o lectura.o -o ordena Con el comando anterior los módulos objeto ordena.o y lectura.o se combinan con módulos de las librerías estándar para crear el ejecutable ordena. 8.Depuración de un programa El depurador gdb se utiliza para detectar errores de ejecución. Nos permite ejecutar un programa instrucción por instrucción y revisar el valor de las variables. En Unix los módulos ejecutables no tienen que tener una terminación particular. Para los fines de nuestro curso los módulos ejecutables no tendrán ninguna terminación. Para depurar un programa con gdb el programa se debe compilar con la opción -g como se muestra a continuación: 7.1Compilación simple Se tiene un solo módulo fuente y se desea generar un módulo ejecutable. Si nuestro programa fuente se llama ordena.c para compilarlo y obtener el ejecutable deberemos proporcionar el siguiente comando: $ gcc -g ordena.c -o ordena Una vez compilado se inicia la ejecución mediante gdb de la siguiente forma: $ gdb ordena 7 ejecuta. Una vez iniciado gdb podemos listar las instrucciones del programa con el comando l. (gdb) n (gdb) l 8.5Ejecución paso a paso (entrando a las funciones) Sólo se teclea la letra ele. El comando s es similar a n, sin embargo, cuando en la línea que se ejecuta se invoca una función gdb nos muestra la primera instrucción de la función invocada. 8.1Establecer puntos de interrupción Antes de iniciar la ejecución del programa debemos establecer uno o varios puntos de interrupción (break point) con el comando b. (gdb) s (gdb) b 17 8.6Detección de puntos de falla Con el comando anterior gdb establece un punto de interrupción en la línea 17. Es posible establecer tantos puntos de interrupción como se desee. Cuando la ejecución del programa llegue a un punto de interrupción gdb detiene la ejecución antes de ejecutar la instrucción de esa línea y nos permite revisar los valores de las variables. Cuando un programa compilado con la opción –g aborta por algún error (división entre cero, falla de segmento, etc.) y genera un vaciado de memoria (core dump) se invoca el depurador con un comando similar a: $ gdb ordena core 8.2Inicio de la ejecución Como se puede observar, el primer argumento es el archivo ejecutable y el segundo argumento es el archivo que contiene el vaciado de memoria. El depurador nos mostrará la línea que produjo el problema y podemos analizar la pila del sistema para conocer la ruta por donde se llegó al problema. por ejemplo: Para iniciar la ejecución del programa se utiliza el comando r. (gdb) r Con esto se inicia la ejecución del programa hasta llegar a un punto de interrupción o terminar la ejecución del programa. (gdb) bt Para conocer el valor de las variables se utiliza el comando p. Nos muestra todos los llamados a funciones que nos llevaron al punto de falla del programa. Por cada nivel de llamado en la fila se encuentra un contexto de ejecución (frame) que nos dice el nombre de la función y los valores de los argumentos. Con el comando: (gbd) p k (gdb) f n Con el comando anterior se lista el valor de la variable k. Podemos situarnos en el contexto número n para poder listar los valores de las variables locales y cualquier otra información disponible desde ese contexto de ejecución. 8.3Revisar el contenido de las variables 8.4Ejecución paso a paso (sin entrar a las funciones) Los comandos bt y f se pueden invocar en cualquier otro momento. Para ejecutar una instrucción a la vez se utiliza el comando n. Con este comando no se entra a las funciones que son invocadas desde la línea que se 8.7Manual de referencia de gdb 8 El manual de referencia de gdb se encuentra en la dirección: $ imprime ordena.c http://w4.lns.cornell.edu/public/COMP/info/gdb/gdb_toc.html 9.4Preparación para impresión También se puede buscar en internet usando las palabras GNU y gdb. En el momento de imprimir los programas fuente es conveniente darles un formato adecuado. Para esto se utiliza el comando pr. El comando pr lee los archivos que se le indican y genera un listado con las características que se especifican mediante los parámetros de ejecución. 9.Ejecución del programa Para ejecutar un programa se emplea como comando el nombre del archivo ejecutable generado con el compilador. Por ejemplo: Ejemplo 1: $ ordena 9.1Lectura de datos de un archivo $ pr -n ordena.c >listado $ imprime listado Si se desea leer los datos de un archivo que se encuentra en el disco podemos usar el redireccionamiento de la entrada estándar como sigue: En el ejemplo el archivo ordena.c se formatea agregando números de línea y se almacena en el archivo listado. El segundo comando envía el archivo listado a la impresora. $ ordena <numeros.dat Ejemplo 2: En este ejemplo los datos del programa ordena se van a leer del archivo numeros.dat. Este archivo se puede preparar con editor vi, igual en la misma forma en que se prepara un programa fuente. $ pr -n *.h *.c >listado $ imprime listado En este ejemplo todos los archivos con terminación .h y con terminación .c se numeran y se graban en el archivo listado. El segundo comando envía el archivo listado a la impresora. 9.2Escritura de resultados en un archivo Si se desea que los resultados se escriban en un archivo del disco se usa el redireccionamiento de la salida estándar: 10.Utilería make El programa make de unix se utiliza para compilar programas que se encuentran divididos en varios módulos fuente. Además de facilitar la compilación, minimiza el tiempo requerido para este proceso, ya que solamente recompila los módulos que han tenido alguna modificación. $ ordena >listado Los resultados se almacenarán en el archivo listado. Este archivo se puede ver con el editor vi o se puede enviar a la impresora. Nota. Los dos redireccionamientos se pueden usar simultáneamente como se muestra a continuación: $ ordena <datos.dat Para utilizar el comando make es necesario crear un archivo de instrucciones (script) con el que se guía a make respecto a como se lleva a cabo la compilación. El archivo de instrucciones se crea con cualquier editor de textos como el vi. >listado 9.3Impresión de programas y resultados Supongamos que tenemos un programa que consta de varios módulos como se muestra a continuación: Para imprimir un archivo de texto en la impresora del sistema se emplea el comando imprime en la siguiente forma: calcula.cpp 9 el archivo se llama de otra manera como proyecto.mak, entonces es necesario realizar la siguiente invocación. #include “avl.h” #include “calcula.h” . . . main() { . . . } $ make –f proyecto.mak En el ejemplo anterior existen dos clases de líneas que llamaremos reglas y comandos. Las reglas contiene el nombre de un archivo objetivo seguido de dos puntos y seguido de la lista de los archivos de los que depende. Así en la primera línea se especifica que el archivo calcula depende de los archivos calcula.o y avl.o. La segunda línea contiene el comando que genera el archivo calcula o sea una invocación a g++ para que se realice la liga de los dos módulos objetos. Los comandos para generar los archivos empiezan con un tabulador. avl.cpp #include “avl.h” double *Avl::Avl { . . . }; Como puede apreciarse, el programa calcula se encuentra dividido en dos módulos. El primero contiene el programa principal e invoca a las fucniones de la clase Avl que se encuentran definidas en el módulo avl.cpp. Para realizar esta compilación es necesario hacer dos compilaciones y una edición de encadenamiento (link). Además se deben aplicar las siguientes reglas: En general un archivo make está formado por instrucciones de generación. Una instrucción de generación tiene una regla de dependencia seguida por uno o varios comandos Unix. Las reglas empiezan en la columna 1 y los comandos se inician con un tabulador. En un archivo make es posible invocar cualquier comando válido Unix aunque por lo gneral solamente utilicemos llamadas al compilador. 1).- Cada que cambie alguno de los archivos calcula.cpp, calcula.h o avl.h es recompilar calcula.cpp para generar calcula.o. 2).- Cada que cambie el archivo avl.cpp o avl.h es necesario recompilar avl.cpp para generar el archivo avl.o. Uso de macros En un archivo make podemos definir macros de la siguiente manera: 3).- Cada que cambie el archivo avl.o o calcula.o es necesario ejecuatar el link para generar el archivo ejecutable calcula. OBJS = avl.o calcula.o Posteriormente podemos hacer referencia al valor de la macro en cualquier parte del archivo como se muestra a continuación: Esto se logra con una archivo makefile con el siguiente contenido: g++ $(OBJS) calcula: calcula.o avl.o g++ calcula.o avl.o –o calcula calcula.o: calcula.cpp calcula.h avl.h g++ calcula.cpp –o calcula.o avl.o: avl.cpp avl.h g++ avl.cpp –o avl.o 11.Utilería tar El programa tar tiene la capacidad de agrupar un conjunto de directorios y archivos en un paquete (tarfile). El mismo programa se usa para desempacar la información y reconstruir la estructura de directorios y archivos originales. Para compilar el programa unicamente se debe invocar al comando make como se muestra a continuación: $ make En este curso, los archivos de cada tarea deberán estar contenidos en un directorio con el nombre tarea1, tarea2, Etc. El directorio deberá contener exclusivamente los archivos necesarios para compilar y ejecutar los programas necesarios. Si no se proporcionan argumentos al comando make, este comando busca el archivo llamdo Makefile o makefile para hacer la compilación. Si 10 Este directorio podrá tener subdirectorios. Para empacar la tarea que se encuentra en el directorio tarea5 se utilizará el siguiente comando: 12.Compresión de archivos Los programas compress y uncompress se utilizan para comprimir y restaurar archivos. La compresión puede ahorrar una cantidad importante de espacio de almacenamiento. $ tar cf tarea5.tar tarea5 En este caso cf son las opciones. La c indica que se va a crear un nuevo paquete y la f significa que el paquete va a se un archivo (por omisión sería una cinta magnética). tarea5.tar es el archivo que va a contener el paquete y tarea5 es el nombre del directorio que corresponde a la tarea número cinco. Supongamos que deseamos comprimir un paquete que contiene todos los archivos de la tarea cinco y que se encuentran en el archivo tarea5.tar. Para esto se usa el siguiente comando: $ compress tarea5.tar Es posible revisar el contenido de un paquete. En este caso se emplea el comando: El comando compress sustituye el archivo original por el archivo comprimido tarea5.tar.Z. $ tar tf tarea5.tar Si nuevamente desseamos descomprimir el archivo tarea5.tar.Z podemos usar el siguiente comando: Para reconstruir la estructura de directorios almacenados en un paquete nos colocamos en el directorio a partir del cual deseamos reconstruir la estructura de directorios y usamos un comando como el siguiente: $ uncompress tarea5.tar.Z En este caso el archivo comprimido se sustituye por el archivo original. $ tar xf tarea5.tar 11 Índice login...................................................................... 2 ls 3 make....................................................................10 man....................................................................... 2 mkdir.................................................................. 3 Modificación de texto........................................... 6 modo de comando............................................... 5 modo de entrada..................................................5 Modos de operación de vi..................................... 5 Movimientos del cursor........................................ 5 mv......................................................................... 3 Pasar a modo de entrada de texto..........................5 password............................................................... 2 Preparación para impresión.................................. 9 Revisar el contenido de las variables.................... 8 rm......................................................................... 3 rmdir.................................................................... 3 Salir del sistema.................................................... 2 Sistema de archivos.............................................. 2 Sólo compilación.................................................. 7 Sustituciones globales...........................................6 tar........................................................................ 11 trayectoria............................................................. 3 Uso del editor vi....................................................4 cd..........................................................................3 clave del usuario................................................... 2 Codificar el programa........................................... 4 Comandos de línea de comandos..........................6 Comandos de pantalla........................................... 5 Compilación simple.............................................. 7 Compresión de archivos......................................11 Copia y pegado..................................................... 6 Corrimientos de la pantalla................................... 5 Depuración de un programa..................................8 Desarrollar el algoritmo........................................ 4 Desarrollo de programas.......................................4 Detección de puntos de falla................................. 8 directorios............................................................. 2 Editar.....................................................................4 Ejecución paso a paso........................................... 8 Ejecución paso a paso (entrando a las funciones).8 Entrada al sistema................................................. 2 Escritura de resultados en un archivo................... 9 Establecer puntos de interrupción.........................8 Generación de un ejecutable con varios objetos... 8 Impresión de programas y resultados................... 9 Inicio de la ejecución............................................ 8 Leer y salvar archivos........................................... 6 12 13