L'ultimo argomento che verra' affrontato in questo corso e' quello degli
accessi al time del clock con le chiamate di sistema UNIX.
L'utilizzo delle funzioni di time include:
dire l'ora;
fornire il tempo a programmi e funzioni;
settaggio di numeri casuali.
time_ttime(time_t*tloc) - ritorna il tempo, misurato in secondi, a partire
da 00:00:00 GMT, Jan. 1, 1970.
Se "tloc" non e' nullo, il valore di ritorno viene anche memorizzato nella
locazione a cui punta tloc.
time() ritorna il valore del tempo, in caso di successo.
In caso di insuccesso, ritorna (time_t) -1. "time_t" risulta definito come
tipo long(int) nei file header e .
int ftime(struct timeb *tp) - riempie una struttura puntata da tp, come
definito in :
struct timeb
{time_t time;
unsigned short millitm;
short timezone;
short dstflag;
};
La struttura contiene il tempo espresso in secondi a partire dall'epoca,
con l'intervallo di massima precisione che arriva fino a 1000 millisecondi,
il fuso orario locale (misurata in minuti in direzione ovest a partire da
Greenwich) ed un flag che, se non e' uguale a 0, indica l'ora legale
applicata localmente negli appropriati periodi dell'anno.
In caso di successo, ftime() non ritorna alcun valore utile, mentre ritorna
-1 in caso di errore.
Altre due funzioni definite in "#include <time.h>" sono:
char *ctime(time_t*clock)
char *asctime(struct tm *tm)
ctime() converte un long integer (puntato da clock) ad una stringa di 26
caratteri nella forma:
Sun Sep 16 01:03:52 1973
asctime() ritorna un puntatore alla stringa.
Esempio 1: Tempo (in secondi) per eseguire alcune operazioni:
/* timer.c */
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
main()
{int i;
time_t t1,t2;
(void) time(&t1);
for (i=1;i<=300;++i)
printf("%d %d %d \N",1,i*i,i*i*i);
(void) time(&t2);
printf("\n Time to do 300 squares and cubes = %d seconds \n",
(int)t2-t1);
}
Esempio 2: Settaggio di un gruppo di numeri casuali:
/* random.c */
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
main()
{int i;
time_t t1;
(void) time(&t1);
srand48((long)t1);
/* use time in seconds to set seed */
printf("5 random numbers
(Seed = %d):\n",(int)t1);
for (i=0;i<5;++i)
printf("%d", lrand48());
printf("\n\n"); /* flush print buffer */
}
lrand48() ritorna dei log integers non negativi uniformemente distribuiti
nell'intervallo (0, 2**31).
Una funzione simile drand48() ritorna numeri a doppia precisione compresi
nel range [0.0, 1.0].
srand48() setta l'origine per questi generatori di numeri random. E'
importante avere gamme diverse quando si richiamano le funzioni, altrimenti
verra' generato lo stesso set di numeri pseudo-random.
time() fornisce sempre un'unica gamma d'origine.