Está en la página 1de 3

Sistemas Operativos - Laboratorio de C básico en Linux

Introducción

Ahora nos pondremos en la tarea crear un programa en C, y luego compilarlo. Para editar
el código fuente necesitamos usar un editor de texto. Si nos encontramos con una consola de texto,
podemos usar nano, por ejemplo, y podemos comenzar invocando el comando seguido del nombre del
archivo a editar, ya sea que éste exista o no:

nano ejercicio_1.c

Una vez terminado de editar el código podemos salir (en caso de usar nano, tener en
cuenta que el menú de abajo en la pantalla indica con el símbolo ^ que debe presionar la tecla Ctrl, y
compilarlo, o bien guardar sin salir (:w) y realizar la compilación en otra consola o terminal.
En caso de encontrarse en entorno de texto (no gráfico), puede abrir una nueva consola
virtual (cambiando con Alt-F1 a F6) iniciar sesión y realizar la compilación. Este último método
permite alternar entre la línea de comandos (para compilar) y el código fuente (para editar) con mayor
rapidez. Es como tener ventanas en el entorno gráfico.

Otra alternativa recomendable si se dispone de entorno gráfico, es usar Geany, que es un


editor avanzado que presenta características de un entorno de desarrollo integrado (IDE). Tenga en
cuenta que, si bien Geany provee la opción de compilar presionando un botón, en este TP se requiere
que la compilación sea hecha por comandos desde una consola o terminal, como se indica a
continuación.

Para compilar, básicamente debemos invocar al compilador (gcc) seguido del nombre del
archivo con el código fuente (extensión .c). La opción -o nos permite especificar el nombre del
ejecutable que se creará como resultado del proceso. De ser omitida dicha opción, el nombre del
ejecutable será a.out.
En el ejemplo siguiente se muestra la línea de comandos para compilar el código en el
archivo ejercicio_1.c y para nombre del ejecutable será ejercicio_1 (notar la ausencia de la
extensión .c) en el nombre del ejecutable.

gcc ejercicio_1.c -o ejercicio_1

En caso de que el compilador encuentre errores, serán presentados por pantalla, indicando
el número de línea en el cual se encuentran (habrá que corregirlos y recompilar). De otro modo, la
compilación resultó exitosa y el archivo ejecutable ejercicio_1 debería estar en el directorio actual.

Podemos verificar su existencia listando contenido del directorio (con dir o ls). Para
ejecutarlo alcanza con el comando:

./ejercicio_1

Para cancelar la ejecución del programa (antes de que finalice), presione Ctrl-c.

Cabe destacar que olvidarse de guardar el archivo fuente luego de modificarlo, y olvidarse
de recompilar el código luego de modificaciones son errores comunes que deben ser evitados poniendo
atención. Otro punto a tener en cuenta es que el archivo a ejecutar, valga la redundancia, debe ser el
ejecutable generado como resultado de la compilación (a.out, o ejercicio_1, por ejemplo), y no el
código fuente. Intentar ejecutar ejercicio_1.c (notar la extensión) resultará probablemente en un
error, por ser un archivo de texto, no un ejecutable.
Al trabajar en la consola de texto, no es necesario incluír al final del programa
instrucciones como las que se usan en el entorno Windows, tales como getch() o system("pause"),

Página 1 de 3
Sistemas Operativos - Laboratorio de C básico en Linux

puesto que (aparte de no funcionar en Linux), la consola no se cerrará al finalizar la ejecución. La


librería conio no está instalada, no la use.

Otra sugerencia es que no intente escribir el código completo del programa antes de
compilar. En cambio, lo recomendable es escribir un fragmento del código, compilar, depurar y
ejecutar, y si funciona bien, recién continuar con otro fragmento del código.

Cuestionario de control

De manera individual, es decir, no grupal, lea el texto anterior y responda las siguientes preguntas, a
modo de control de lectura.

a. ¿Cómo se llama el compilador?


b. ¿Para qué sirve la opción -o?
c. ¿Qué sucede cuando no se establece la opción -o?
d. ¿Cómo sé si la compilación tuvo éxito?
e. ¿Qué comando debo tipear para ejecutar el programa compilado si no usé la opción -o?
f. ¿Qué librería no debo usar?
g. Si hago cambios en el programa, pero al ejecutar sigue igual que la vez anterior, ¿qué puede estar
pasando?

Ejercicios

1. Cree un programa que lea 10 números enteros tanto positivos como negativos ingresados por el
teclado y presente su máximo, mínimo y promedio al finalizar.

2. Cree un programa que lea números enteros tanto positivos como negativos ingresados por el teclado
hasta tanto se ingrese el número cero y presente su máximo, mínimo y promedio al finalizar.

3. Modifique el programa del punto 1 para que al ingresar el texto "salir" termine de inmediato sin
presentar resultados; y al ingresar el texto "resultados" termine presentando los resultados.

4. Cree un programa que lea una cadena de texto de hasta 100 caracteres ingresada por teclado y
cuente su cantidad de palabras.

5. Cree un programa que lea cadenas de texto de hasta 100 caracteres ingresadas por teclado y vaya
presentándolas por pantalla concatenadas, hasta que se ingrese el número 0, momento en el cual deberá
presentarse la cantidad total de cadenas ingresadas, y la cantidad total de palabras.

6. Descargue el código del programa con el siguiente comando:

wget http://soutn.ernet.com.ar/descargas/programas/recorrer_matriz.c

Lea el programa y modifíquelo para que recorra la matriz, colocando en la variable 'contenido' el valor
de cada celda. No importa que el valor se sobreescriba, es sólo para realizar una lectura desde
memoria. Ejecute y verifique su funcionamiento correcto. En caso de encontrarse con un error de
"certificado no confiable", use el comando wget con la opción --no-check-certificate.

Luego, utilice alguna de las herramientas del sistema vistas en trabajos anteriores para averiguar la

Página 2 de 3
Sistemas Operativos - Laboratorio de C básico en Linux

cantidad de memoria principal disponible (es decir, libre). Ajuste el tamaño de la constante BASE para
que el tamaño de la matriz sea cercano a la memoria libre. Se permite una diferencia de hasta 50 MB.
Verifique la ejecución correcta del programa.

A fines de mejorar la precisión de las mediciones subsiguientes, encierre el recorrido de la matriz en un


lazo más, para que se recorra un total de 100 veces por ejecución.

Luego de esto:

a. Ejecute 5 veces el programa, anotando los tiempos de ejecución en cada caso.


b. Invierta el modo en que recorre la matriz. Por ejemplo, si era [i][j], use [j][i]. Compile y ejecute 5
veces más, también anotando los tiempos.
c. ¿Hay diferencia en el modo en que se recorre la matriz? De ser así, ¿a qué podría deberse?

Investigue las siguientes características de la máquina que está utilizando (no importa si es máquina
virtual):

Frecuencia de CPU, frecuencia de RAM, frecuencia del bus, tasa de transferencia máxima de RAM,
tamaño de cachés, tamaño de la línea de los cachés.

Puede obtener algunos datos del CPU ejecutando en la terminal:

cat /proc/cpuinfo

d. Considerando que el programa realiza transferencias desde memoria, en base al tiempo de ejecución
obtenido y la cantidad de Bytes transferidos, ¿cuál sería la tasa de transferencia para lo encontrado en
los puntos a y b?
e. ¿Encuentra alguna relación entre los valores investigados sobre el CPU y la RAM y estas tasas de
transferencia calculadas? Advertencia: por cada ciclo del lazo, hay una transferencia de memoria, y
varias instrucciones de CPU, es decir que se introducen tiempos adicionales que quitan precisión al
cálculo. No espere encontrar coincidencias exactas en los valores.

Página 3 de 3

También podría gustarte