En este capítulo se revisará como se puede usar el reloj con llamadas al sistema UNIX.
Existen muchas funciones para el tiempo que las que serán consideradas
aquí -- usar las páginas de man
y los listados de la biblioteca
estándar de funciones para más detalles.
El uso más común de las funciones de tiempo son:
Algunas prototipos de las funciones básicas para el tiempo son las siguientes:
t
no es nulo, el valor devuelto también
se guarda en la zona de memoria a la que apunta t
. En caso de error, se
devuelve ((time_t)-1)
y se asigna a la variable errno
un valor
apropiado.
pt
, que esta declarada en <sys/timeb.h>
como sigue:
struct timeb { time_t time; /* Segundos desde epoca, igual que `time'. */ unsigned short int millitm; /* millisegundos adicionales. */ short int timezone; /* Tiempo local medido en minutos oeste de GMT.*/ short int dstflag; /* No cero si se usa horario de verano */ };
En caso de éxito, se devuelve el tiempo transcurrido en segundos desde la
época. En caso de error, se devuelve ((time_t)-1)
y se asigna a la
variable errno
un valor apropiado.
time_t
(long integer) que representa el tiempo de calendadrio y lo
convierte a una cadena de 26 caracteres de la forma producida por la función
asctime()
. En primer lugar descompone los segundos a una estructura
tm
llamando a localtime()
, y entonces llama a asctime()
para convertir la estructura tm
a una cadena.
tm
a una cadena de 26 caracteres de
la forma:
La función asctime()
regresa un apuntador a la cadena.
Como se menciono previamente, básicamente existen tres posibles usos de las funciones de tiempo.
Este es un ejemplo sencillo que ilustra las llamadas a la función tiempo en distintos momentos:
/* timer.c */ #include <stdio.h> #include <sys/types.h> #include <time.h> main() { int i,j; time_t t1,t2; (void) time(&t1); for (i=1; i<=300; ++i) { printf("%d %d %d\n",i, i*i, i*i*i ); for(j=0; j<1000000; j++); /* Un pequeño retardo */ } (void) time(&t2); printf("\n Tiempo para hacer 300 cuadrados y cubos = %d segundos\n", (int) t2-t1); }
Se ha visto un ejemplo similar previamente, en esta ocasión se usa la función lrand48()
para generar una secuencia de números:
/* random.c */ #include <stdio.h> #include <sys/types.h> #include <time.h> main() { int i; time_t t1; (void) time(&t1); srand48((long) t1); /* usar time en segundos para poner la semilla */ printf("5 numeros aleatorios (semilla = %d):\n",(int) t1); for (i=0;i<5;++i) printf("%d ", lrand48()); printf("\n\n"); }
La función lrand48()
devuelve enteros largos no negativos distribuidos uniformememnte entre 0 y .
Una función similar es la función drand48
que regresa números de doble precisión en el rango .
srand48()
pone el valor de la semilla para estos
generadores de números aleatorios. Es importante tener diferentes
semillas cuando se llame a las funciones de otra forma el mismo
conjunto números pseudo-aleatorios sera generados. La función time()
siempre da una semilla única (siempre y cuando haya transcurrido por lo menos 1 segundo).