Está en la página 1de 3

LLAMADAS AL SISTEMAS BÁSICAS

PRÁCTICA 1

Objetivos:

1. Conocer las herramientas de desarrollo: editor, compilador, ensamblador, linker y


makefile y diferenciar las etapas de compilación de un programa C.
2. Aprender a usar las llamadas al sistema open, close, creat, read, write.
3. Conocer cómo pasar argumentos desde la línea de comandos.
Esta práctica consiste en implementar la funcionalidad semejante a la orden
copy (cp) de Linux. Toda la programación se deberá realizar en C sobre
Linux.

Preliminares

Para el desarrollo de esta práctica es requisito tener conocimientos previos


en el manejo de comandos básicos de la shell (bash) de Linux. Deberá
elegir un editor de texto de su preferencia para codificar su programa.
Además, deberá automatizar el proceso de compilación del código fuente y
enlazamiento de código objeto para generar el ejecutable.

Como punto de partida interesa conocer que el proceso de compilación de


todo programa en C incluye cuatro etapas (siempre en el mismo orden): (1)
preprocesamiento, (2) compilación en sí, (3) ensamblado y (4) enlazado
(linking). El compilador GCC es capaz de preprocesar y compilar varios
archivos fuentes en uno o varios archivos en lenguaje ensamblador,
seguidamente con cada archivo en ensamblador genera un archivo en
código objeto y con el enlazado combina todos los archivos objetos para
generar un archivo ejecutable. [1]

GCC incluye opciones para indicarle qué etapa de compilación realizar, para
ello hay que emplear las opciones –E, –c o –S, cuyo significado de cada una
se describe brevemente a continuación:
-E realiza sólo el preprocesamiento, enviando el resultado a la salida
estándar.
-c realiza el preprocesamiento y compilación, obteniendo el archivo en
código objeto, no realiza enlazado.
-S realiza la compilación, transforma el código C en el lenguaje
ensamblador propio del computador que usemos. La salida es en forma
de un archivo en código ensamblador.

El programa

Ud. deberá desarrollar un programa que realice la operación semejante a la


orden cp de Linux, es decir, que se copiará el contenido de un fichero hacia
otro fichero. El programa deberá recibir tres argumentos por líneas de
órdenes; el primer argumento corresponderá al fichero origen, y el segundo,
al fichero destino. La línea de comando será:

programa fichero_origen fichero_destino [–b tam_buffer]

1
Donde fichero_origen se refiere al fichero que se desea copiar y
fichero_destino es el nombre del fichero que se creará (o sobrescribirá en
caso de existir) como resultado de la copia. La opción –b permitirá indicar un
tamaño del buffer de lectura y escritura a utilizar para realizar la copia del
fichero; si no se específica se considera por defecto un tamaño de 64 bytes.

Para esta práctica deberá hacer uso de varias llamadas al sistema: open,
creat, close, read, write, por lo que deberá investigar cómo funcionan y el
uso de las mismas. Es importante notar que el programa deberá copiar
ficheros de contenido texto o binario.

Parte del trabajo de esta práctica es familiarizarse con las diferentes etapas
del proceso de compilación y conocer detalles específicos de cada una de
ellas, para ello, una vez codificado su programa, deberá experimentar con
las opciones del compilador descritas en la sección anterior (véase páginas
del manual para gcc). Algunas preguntas que le pueden servir de guía a
dicho proceso son:

¿Qué salida obtenemos al ejecutar gcc con la opción –E


proveyéndole como entrada nuestro archivo de código fuente?
¿Qué salida obtenemos al ejecutar gcc con la opción –S indicándole
como entrada nuestro archivo de código fuente?
¿Qué salida obtenemos al ejecutar gcc con la opción –c indicándole
como entrada nuestro archivo de código fuente?

Finalmente, asimilado el proceso de compilación del programa, Ud. deberá


crear un archivo Makefile en el que incluirá los comandos adecuados para
distinguir las principales etapas de compilación y emplear la herramienta
make para generar de forma automatizada el ejecutable correspondiente.
Una guía para este último paso puede encontrarla en [2].

Fecha de entrega:______________

Referencias

[1] Sección 1 de las páginas del manual de Linux (man gcc).


[2] Make – a tutorial. Disponible en http://www.eng.hawaii.edu/Tutor/Make/

Bibliografía

Márquez, Francisco (2005) Unix Programación Avanzada 3ª edición. Madrid:


Alfaomega Grupo Editor.