Come utilizzare la funzione GetTimeofday in C lingua?

Come utilizzare la funzione GetTimeofday in C lingua?
IL getTimeofDay () La funzione ottiene il tempo di clock del sistema. Il tempo attuale è espresso in secondi trascorsi e microsecondi dalle 00:00:00, 1 gennaio 1970 (Epoca UNIX). In questo articolo, ti mostreremo come usare il getTimeofDay () funzione in Linux. Quindi iniziamo.

Sintassi

int getTimeofDay (struct timeval *tp, struct timezone *tz)

IL getTimeofDay () La funzione è definita in sys/time.H File di intestazione.

argomenti

Questa funzione prende due argomenti:

Il 1st L'argomento indica il Timeval struttura. IL Timeval La struttura è dichiarata come sotto in sys/time.H File di intestazione:

struct timeval
time_t tv_sec; // usato per secondi
SUSECONDS_T TV_USEC; // utilizzato per i microsecondi

La struttura del timeval struct rappresenta un tempo di calendario. Ha due membri:

  • TV_SEC : È il numero di secondi dall'epoca.
  • TV_USEC : Sono ulteriori microsecondi dopo il numero di secondi dal calcolo dall'epoca ..

Il 2nd L'argomento indica il fuso orario struttura. Dovrebbe normalmente essere impostato su NULL perché Strutture Timezone è obsoleto. Questo argomento è solo per la compatibilità all'indietro.

Valori di ritorno

Sul successo, il getTimeofDay () restituire 0, per errore la funzione restituisce -1.

Semplice Ottieni tempo e stampa

#includere
#includere
int main ()
struct timeval current_time;
getTimeofday (& current_time, null);
printf ("Seconds: %ld \ nmicro secondi: %ld",
ora attuale.TV_SEC, Current_time.TV_USEC);
restituzione 0;

Produzione:

Qui, sys/time.H è stato incluso per getTimeofDay () funzione di funzione e timeval. IL getTimeofDay () funzione Imposta il tempo in Timeval (current_time) membro della struttura. TV_SEC è il numero integrale di secondi trascorsi dall'inizio del Epoca unix, a mezzanotte UTC il 1 ° gennaio 1970 e TV_USEC è un numero aggiuntivo di microsecondi trascorsi da TV_SEC. Se esegui il programma, dovresti vedere l'output. Ogni volta che si esegue il programma, l'output cambierà.

Errore argomento nullo

#includere
#includere
int main ()
struct timeval current_time;
getTimeofday (null, null);
restituzione 0;

Produzione:

In questo esempio mostra quel primo argomento del getTimeofDay () La funzione non dovrebbe essere null. L'avviso di compilazione arriverà se il primo argomento è nullo.

Formattazione del tempo corrente Esempio

#includere
#includere
#includere
int main ()
struct timeval tv;
time_t t;
struct tm *info;
Char Buffer [64];
getTimeofday (& TV, null);
T = TV.TV_SEC;
info = locale (& t);
printf ("%s", asctime (info));
strftime (buffer, sizeof buffer, "oggi è %a, %b %d.\ n ", info);
printf ("%s", buffer);
strftime (buffer, sizeof buffer, "Il tempo è %i: %m %p.\ n ", info);
printf ("%s", buffer);
restituzione 0;

Produzione:

In questo esempio mostra come stampare la data e l'ora in formato diverso. Non è molto facile rappresentare le date dal valore di ritorno di getTimeofDay () funzione . Qui, ora locale() E strftime () Le funzioni sono usate per rappresentare bene il valore di ritorno di getTimeofDay ().

IL ora locale() La funzione prende un argomento, che è un riferimento a un puntatore del TV_SEC campo di struct timeval e restituisce un riferimento a un puntatore di a struct tm oggetto.

IL strftime () La funzione genererà una stringa personalizzata e formattata che mostra la data e l'ora dal struct tm Pointer. Gli specificatori di formato vengono utilizzati per la visualizzazione formattata. Ad esempio, la stringa di formato "%d-%m-%y%h:%m:%s" specifica la data e l'ora in questo modulo:

14-04-2020 13:09:42

Di seguito sono riportati gli specificatori di conversione, possono essere utilizzati per la visualizzazione formattata:

Specificatore Senso
%UN Il nome abbreviato del giorno della settimana secondo l'attuale locale.
%UN Il nome del giorno della settimana secondo il luogo attuale.
%B Nome del mese abbreviato secondo l'attuale locale.
%B Nome del mese intero secondo il locale presente.
%C La rappresentazione preferita della data e dell'ora per l'attuale locale.
%D Come numero decimale per il giorno del mese (intervallo 01 - 31).
%H Utilizzando 24 ore (intervallo 00 - 23) all'ora come numero decimale.
%IO Utilizzando 12 ore (intervallo 00 - 23) all'ora come numero decimale.
%J Come numero decimale per il giorno dell'anno (intervallo 001-366).
%M Come numero decimale per il mese (intervallo 01 - 12).
%M Il numero decimale del minuto.
%P Sulla base del valore temporale specificato, 'Am' o 'PM' o le stringhe equivalenti per la localizzazione corrente.
%S Il numero decimale del secondo.
%X Rappresentazione preferita della data per il locale corrente, ma senza tempo.
%X Rappresentazione preferita del tempo per il locale corrente, ma senza data.
%y L'anno è decimale ma nessun secolo (vanno da 00-99).
%Y L'anno è decimale incluso il secolo.
%Z Il fuso orario.

Utilizzo di GetTimeofDay per misurare il tempo di esecuzione del programma

#includere
#includere
int main ()
Struttura Timeval Start, fine;
getTimeofday (& start, null);
per (int i = 0; i <1e5 ; i++)

getTimeofday (& end, null);
printf ("Il tempo impiegato per contare a 10^5 è: %ld micro secondi \ n",
((FINE.TV_SEC * 1000000 + fine.TV_USEC) -
(inizio.TV_SEC * 1000000 + Avvia.TV_USEC)));
restituzione 0;

Produzione:

Questo esempio mostra che come getTimeofDay () La funzione può essere utilizzata per il calcolo del tempo di esecuzione di un programma.

Conclusione

In questo modo, il getTimeofDay () La funzione potrebbe essere utilizzata in Linux. Per il porting del codice esistente, il getTimeofDay () la funzione può essere utilizzata ma nel nuovo codice non dovrebbe essere utilizzata. clock_gettime () la funzione può essere usata al posto di getTimeofDay ().