PDA

View Full Version : Confrontare le Date in C


fedo
27-08-2003, 19:10
Rieccomi qui per l'ennesima domanda :)

Se ho delle stringhe TimeStamp in formato GMT (quindi giorno-mese-anno ore.minuti.secondi ) e voglio confrontarle per vedere se un certo Timestamp è precedente o successivo ad un altro, come faccio?

Devo per forza usare la struttura tm ? (non ricordo in che libreria sta)...

Conoscete librerie che fanno questo?

Ciao

cionci
28-08-2003, 09:04
Puoi operare anche sui time_t con la funzione difftime...
La struttura tm è in time.h...

Comunque credo che la soluzione migliore sia di prendere la stringa a riempire i vari campi di una struttura tm con sscanf...

sscanf(oraGMT, "%d-%d-%d %d.%d.%d",....);

Dopo converti le due strutture tm in time_t con mktime e usi difftime per ottenere il risultato...

double diff;

diff = difftime(mktime(&tm1), mktime(&tm2));

printf((diff > 0)?"tm2 è maggiore di tm1 di %d secondi":"tm1 è maggiore di tm2 di %d secondi", (int)diff);

fedo
28-08-2003, 09:28
grazie..ora provo

mjordan
28-08-2003, 09:47
Comunque in ogni caso è sempre bene consultare LA SACRA SCRITTURA :

http://www.gnu.org/manual/glibc-2.2.5/html_node/Date-and-Time.html#Date%20and%20Time

:D :D :D
Vedrai che ti tornerà utile ... (perchè, se non ricordo male, sei uno unixiano).

fedo
28-08-2003, 10:01
Originariamente inviato da mjordan
Vedrai che ti tornerà utile ... (perchè, se non ricordo male, sei uno unixiano).


Grazie anhe a te...però sbagli...io sono "Windowsiano" :p :p

mjordan
28-08-2003, 10:13
Originariamente inviato da fedo
Grazie anhe a te...però sbagli...io sono "Windowsiano" :p :p

Ok. Nessuno è perfetto :D :D :D :D :D

fedo
29-08-2003, 11:06
rieccomi a rompere :D

stavolta vorrei sapere questo:

ho una struct (chiamiamola "st") i cui elementi sono

char * elem1;
char *elem2;
int elem3;


Vorrei sapere qual è la sintassi per far stampare a video i valori contenuti in quegli elementi.

Usando printf(st->elem1) ...etc
a volte non mi ritorna nulla oppure mi crasha...

Inoltre non so se scrivere *nomevariabile oppure * nomevariabile (notare lo spazio nel secondo caso) , vogliono dire cose diverse...

Scusate, ma i puntatori li odio perchè sono Javista ;)

cionci
29-08-2003, 11:49
Per lo spazio puoi fare come più ti piace...

Ma quei puntatori a cosa puntano ? Se fai due puntatori, non li fai puntare a niente e poi li usi è normale che ti crashi il programma...

fedo
29-08-2003, 14:17
puntano ad aree di memoria allocate prima con malloc e poi inizializzate con dei caratteri tramite strcpy..

non và bene?

cionci
29-08-2003, 14:54
Sì, ma dovresti farci vedere il codice ;)

fedo
29-08-2003, 19:05
ok, quel problema l' ho risolto..

qualcuno se ne intende di bufferizzazione in RAM?



FILE *fp_cache;
/*** Prepara il registro di cache ad essere usato. ***/
void cache_init()
{
if ((fp_cache = fopen("cache_reg.dat","r+")) == NULL) printf("Errore nell'apertura del registro di cache");


setvbuf(fp_cache,NULL,_IOLBF,BUFF_LEN); //Bufferizza in RAM il registro di cache per migliorare le prestazioni in lettura e scrittura.
}


Le operazioni che faccio in seguito sul puntatore fp_cache (tipo fread(fp...etc), è sicuro che me le fa in RAM e non su disco?

E poi aggiorna il file su disco quando il buffer è pieno o in momenti di calma... questa funzione setvbuf non l'ho mai usata..

per la cronaca,tutta questa storia è per un server http.

Ciao ciao

mjordan
29-08-2003, 22:28
Originariamente inviato da fedo
ok, quel problema l' ho risolto..

qualcuno se ne intende di bufferizzazione in RAM?



FILE *fp_cache;
/*** Prepara il registro di cache ad essere usato. ***/
void cache_init()
{
if ((fp_cache = fopen("cache_reg.dat","r+")) == NULL) printf("Errore nell'apertura del registro di cache");


setvbuf(fp_cache,NULL,_IOLBF,BUFF_LEN); //Bufferizza in RAM il registro di cache per migliorare le prestazioni in lettura e scrittura.
}


Le operazioni che faccio in seguito sul puntatore fp_cache (tipo fread(fp...etc), è sicuro che me le fa in RAM e non su disco?

E poi aggiorna il file su disco quando il buffer è pieno o in momenti di calma... questa funzione setvbuf non l'ho mai usata..

per la cronaca,tutta questa storia è per un server http.

Ciao ciao


Ti ripeto, cerca sulla BIBBIA ;)