You are on page 1of 2

Sistemas Operativos.

2007/2008
Prctica 1.
Ttulo: Recordatorio C. Paso de parmetros a la funcin main.
Da de realizacin: 22 Octubre
Correccin: 29/10.
La funcin main(), al igual que el resto de funciones en c admiten el paso de parmetros. En
este caso, claro est, por ser la primera funcin que se ejecuta de nuestro programa los
parmetros que acepta son los que se introducen desde la lnea de comandos. Esto es, si
tenemos un programa que compilado se llama programa puedo escribir:
$ programa uno dos tres
Cada una de las cadenas anteriores son parmetros para la funcin main incluida programa.
Para ello, se tiene la siguiente sintaxis:
main(int argc, char *argv[])
{
}
La primera de las variables, contiene el nmero de parmetros que pasamos a main. En este
caso 4. El primero es programa, el segundo es uno, el tercero dos y el cuarto tres.
Grficamente, la llamada
$ programa c 10 2.0 produce la siguiente configuracin de argv
argv[]
p r o g r a m a \0
[0]
- c \0
[1]
1 0 \0
[2]
2 . 0 \0

[3]
[4]

NULL

El siguiente programa, escribe los argumentos por la salida estndar:


#include <stdio.h>
main(int argc, char * argv[])
{
int i;
/* mostrar el nmero de argumentos */
printf(El nmero de argumentos es %d\n,argc);
/* mostrar cada uno de los argumentos */
for (i=0;i<argc;i++)

printf(el argumento %d es %s\n,i,argv[i]);


}
Se pide:
1. Implementar el programa anterior y probarlo.
2. Un proceso por lotes o batch suele tener como origen un fichero de comandos en el que
se almacenan las rdenes a ejecutar. De este fichero se cogen las ordenes y se ejecutan
una a una, de manera que cuando finaliza alguna de ellas se lanza a ejecutar la siguiente y
as sucesivamente. Imaginemos que tenemos un proceso capaz de ejecutar las ordenes de
un determinado fichero en funcin de una fecha propuesta por el usuario. Entonces, se
pide realizar un programa para mantener el fichero de rdenes. Esto es, partiendo del
programa anterior se pide realizar un programa en c para mantener un fichero de
comandos del sistema ordenado por la hora en que desearamos que se ejecutase.
El programa debe admitir varios formatos de argumentos:
a) ejecuta hora comando con argumentos
Esta orden inserta al fichero ejecuta.at una lnea con la hora y el comando con
argumentos a ejecutar ordenado por hora. Si el fichero ejecuta.at no existe entonces lo
crea.
Ejemplo:
$ ejecuta 09:15:29 cat pru.c | more
$ ejecuta 09:15:28 ls l -a
b) ejecuta i
lee el fichero ejecuta.at y muestra una lista ordenada de las horas de ejecucin y las
ordenes:
Ejemplo:
$ ejecuta -i
Hora ejecucin
comando con argumentos
09:15:28
ls -l a
09:15:29
cat pru.c | more
c) ejecuta d n
borra la lnea n del fichero, para lo que nos pedir confirmacin de la orden.
Ejemplo:
$ ejecuta d 2
Seguro que quiere borrar la orden 09:15:29 cat pru.c | more? (S/N):
si contestamos S, borrara la lnea del fichero, si contestamos N no hara nada.