C Programmazione

Come usare la funzione gettimeofday in linguaggio C?

Come usare la funzione gettimeofday in linguaggio C?
Il gettimeofday() la funzione ottiene l'ora dell'orologio di sistema. L'ora corrente è espressa in secondi e microsecondi trascorsi da 00:00:00, 1 gennaio 1970 (Unix Epoch). In questo articolo, ti mostreremo come utilizzare il gettimeofday() funzione in Linux. Quindi iniziamo.

Sintassi

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

Il gettimeofday() la funzione è definita in sistema/ora.h file di intestazione.

argomenti

Questa funzione accetta due argomenti:

Il 1sto argomento punta al valore temporale struttura. Il valore temporale la struttura è dichiarata come di seguito in sistema/ora.h file di intestazione:

struct    timeval  
time_t       tv_sec ; //usato per secondi
suseconds_t       tv_usec ; //usato per microsecondi

La struttura timeval rappresenta un'ora di calendario. Ha due membri:

Il 2nd argomento punta al fuso orario struttura. Normalmente dovrebbe essere impostato su NULL perché struttura del fuso orario è obsoleto. Questo argomento è solo per la retrocompatibilità.

Valori di ritorno

In caso di successo, il gettimeofday() restituisce 0, in caso di errore la funzione restituisce -1.

Ottieni tempo e stampa in modo semplice

#includere
#includere
int main()
struct timeval current_time;
gettimeofday(¤t_time, NULL);
printf("secondi: %ld\nmicrosecondi: %ld",
ora attuale.tv_sec, current_time.tv_usec);
restituisce 0;

Produzione:

Qui, sistema/ora.h è stato incluso per gettimeofday() funzione e struttura temporale. Il gettimeofday() la funzione imposta l'ora nel membro della struttura timeval (current_time). tv_sec è il numero integrale di secondi trascorsi dall'inizio del Epoca UNIX, a mezzanotte UTC del 1 gennaio 1970 e tv_usec è il 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 NULL

#includere
#includere
int main()
 
struct timeval current_time;
gettimeofday(NULL, NULL);
restituisce 0;

Produzione:

In questo esempio viene mostrato che il primo argomento di gettimeofday() la funzione non dovrebbe essere NULL. L'avviso di compilazione verrà visualizzato se il primo argomento è NULL.

Esempio di formattazione dell'ora corrente

#includere
#includere
#includere
int main()
struttura timeval tv;
tempo_t t;
struttura tm *info;
buffer di caratteri[64];
 
gettimeofday(&tv, NULL);
t = tv.tv_sec;
info = ora locale(&t);
printf("%s",asctime(info));
strftime (buffer, sizeof buffer, "Oggi è %A, %B %d.\n", informazioni);
printf("%s",buffer);
strftime (buffer, sizeof buffer, "Il tempo è %I:%M %p.\n", informazioni);
printf("%s",buffer);
restituisce 0;

Produzione:

In questo esempio viene mostrato come stampare data e ora in un 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 restituito di gettimeofday().

Il ora locale() la funzione accetta un argomento, che è un riferimento a un puntatore di tv_sec campo di struttura timeval e restituisce un riferimento a un puntatore di a struttura tm oggetto.

Il strftime() la funzione genererà una stringa formattata personalizzata che mostra la data e l'ora dal struttura tm puntatore. Gli identificatori 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 formato:

14-04-2020 13:09:42

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

Specificatore Senso
%un Il nome abbreviato del giorno della settimana secondo l'attuale impostazione localepresent.
%UN Il nome del giorno della settimana secondo l'attuale impostazione locale.
%b Nome del mese abbreviato secondo la locale attuale.
%B Nome del mese completo come da locale attuale.
%c La rappresentazione preferita di data e ora per il locale attuale.
%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 Utilizzo di 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 In base al valore dell'ora specificato, 'am' o 'pm' o le stringhe equivalenti per la locale corrente.
%S Il numero decimale del secondo.
%X Rappresentazione preferita della data per la locale corrente, ma senza ora.
%X Rappresentazione preferita dell'ora per la locale corrente, ma senza data.
%y L'anno è decimale ma non il secolo (intervallo da 00 a 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()
 
struct timeval inizio, fine;
gettimeofday(&start, NULL);
 
per (int i = 0; i <1e5 ; i++)

 
gettimeofday(&end, NULL);
printf("Il tempo impiegato per contare fino a 10^5 è: %ld micro secondi\n",
((fine.tv_sec * 1000000 + fine.tv_usec) -
(inizio.tv_sec * 1000000 + inizio.tv_usec)));
restituisce 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 di codice esistente, il gettimeofday() la funzione può essere usata ma nel nuovo codice non dovrebbe essere usata. clock_gettime()  la funzione può essere utilizzata al posto di gettimeofday().

Come modificare il puntatore del mouse e le dimensioni, il colore e lo schema del cursore su Windows 10
Il puntatore del mouse e il cursore in Windows 10 sono aspetti molto importanti del sistema operativo. Questo si può dire anche per altri sistemi oper...
Motori di gioco gratuiti e open source per lo sviluppo di giochi Linux
Questo articolo tratterà un elenco di motori di gioco gratuiti e open source che possono essere utilizzati per lo sviluppo di giochi 2D e 3D su Linux....
Tutorial Shadow of the Tomb Raider per Linux
Shadow of the Tomb Raider è la dodicesima aggiunta alla serie Tomb Raider, un franchise di giochi d'azione e avventura creato da Eidos Montreal. Il gi...