Com s'utilitza la funció gettimeofday en llenguatge C?

How Use Gettimeofday Function C Language



El gettimeofday () La funció obté l’hora de rellotge del sistema. L'hora actual s'expressa en segons transcorreguts i microsegons des de les 00:00:00 de l'1 de gener de 1970 (Unix Epoch). En aquest article, us mostrarem com utilitzar el fitxer gettimeofday () funció a Linux. Per tant, comencem.

Sintaxi

intgettimeofday( estructtemporal*ciutat, estructfus horari*tz)

El gettimeofday () funció es defineix a sys / time.h fitxer de capçalera.







Arguments

Aquesta funció té dos arguments:



L'1cl'argument apunta a la temporal estructura. El temporal l'estructura es declara a continuació a sys / time.h fitxer de capçalera:



estructtemporal{
time_t tv_sec; // utilitzat durant segons
suseconds_t tv_usec; // s’utilitza durant microsegons
}

L’estructura temporal de l’estructura representa un temps del calendari. Té dos membres:





  • tv_sec : És el nombre de segons des de l'època.
  • tv_usec : Són microsegons addicionals després del càlcul del nombre de segons des de l'època. .

El 2ndl'argument apunta a la fus horari estructura. Normalment s'ha d'establir a NULL perquè zona horària struct està obsolet. Aquest argument és només per a compatibilitat amb versions anteriors.

Retorna els valors

En cas d 'èxit, el gettimeofday () retorna 0, en cas d'error, la funció retorna -1.



Obteniu temps i impressió senzills

#incloure
#incloure

intprincipal() {
estructtemps actual temps_actual;
gettimeofday(&hora_actual,NUL);
printf ('segons:% ld nmicrosegons:% ld ',
hora_actual.tv_sec,hora_actual.tv_usec);

tornar 0;
}

Sortida:

Aquí, sys / time.h s'ha inclòs per gettimeofday () funció i estructura temporal. El gettimeofday () La funció defineix l'hora del membre de l'estructura temporal (hora_actual). tv_sec és el nombre integral de segons transcorreguts des de l'inici del fitxer Època UNIX , a mitjanit UTC l'1 de gener de 1970 i tv_usec és el nombre addicional de microsegons transcorreguts a partir de tv_sec. Si executeu el programa, hauríeu de veure la sortida. Cada vegada que executeu el programa, la sortida canviarà.

Error argument NULL

#incloure
#incloure

intprincipal() {

estructtemps actual temps_actual;
gettimeofday(NUL,NUL);
tornar 0;
}

Sortida:

En aquest exemple es mostra aquest primer argument del fitxer gettimeofday () la funció no ha de ser NULA. L'avís de compilació vindrà si el primer argument és NUL.

Format de l'exemple d'hora actual

#incloure
#incloure
#incloure

intprincipal() {
estructTV temporal;
temps_t t;
estructtm*info;
charmemòria intermèdia[64];

gettimeofday(&televisió,NUL);
t=televisió.tv_sec;

info= hora local (&t);
printf ('% s', temps (info));
temps de tram (memòria intermèdia, mida dememòria intermèdia, 'Avui és% A,% B% d. n',info);
printf ('% s',memòria intermèdia);
temps de tram (memòria intermèdia, mida dememòria intermèdia, 'El temps és% I:% M% p. n',info);
printf ('% s',memòria intermèdia);

tornar 0;
}

Sortida:

En aquest exemple es mostra com imprimir data i hora en diferents formats. No és molt fàcil representar dates a partir del valor retornat de gettimeofday () funció. Aquí, hora local() i strftime () Les funcions s'utilitzen per representar bé el valor de retorn de gettimeofday () .

El hora local() La funció pren un argument, que és una referència a un punter del fitxer tv_sec camp de struct timeval i retorna una referència a un punter de struct tm objecte.

El strftime () La funció generarà una cadena formatada i personalitzada que mostrarà la data i l 'hora des del fitxer struct tm punter. Els especificadors de format s’utilitzen per a la visualització amb format. Per exemple, la cadena de format% d-% m-% Y% H:% M:% S especifica la data i l'hora en aquest formulari:

2020.04.14 13:09:42

A continuació es detallen els especificadors de conversió que es poden utilitzar per a la visualització amb format:

Especificador Significat
% a El nom abreujat del dia de la setmana segons la configuració regional actual.
% A El nom del dia de la setmana segons la configuració regional actual.
% b Nom del mes abreujat segons la configuració regional actual.
% B Nom del mes complet segons la configuració regional actual.
% c La representació preferida de data i hora per a la configuració regional actual.
% d Com a número decimal del dia del mes (interval 01-31).
% H Utilitzant les 24 hores (rang de 00 a 23) fins a l’hora com a nombre decimal.
% Jo Utilitzant 12 hores (rang de 00 a 23) fins a l’hora com a nombre decimal.
% j Com a número decimal del dia de l'any (rang 001-366).
% m Com a número decimal del mes (interval 01-12).
% M El nombre decimal del minut.
% p En funció del valor horari especificat, ja sigui 'am' o 'pm' o les cadenes equivalents per a la configuració regional actual.
% S El nombre decimal del segon.
% x Representació preferida de la data per a la configuració regional actual, però sense temps.
% X Representació preferida de l'hora per a la configuració regional actual, però sense data.
% i L’any és decimal, però no té segle (oscil·la entre el 00 i el 99).
% I L’any és decimal inclòs el segle.
% AMB La zona horària.

Utilitzant gettimeofday per mesurar el temps d'execució del programa

#incloure
#incloure

intprincipal() {

estructinici temporal,final;
gettimeofday(&començar,NUL);

per (intjo= 0;jo<1e5 ;jo++) {
}

gettimeofday(&final,NUL);
printf ('El temps que es triga a comptar fins a 10 ^ 5 és:% ld micro segons n',
((final.tv_sec * 1000000 +final.tv_usec) -
(començar.tv_sec * 1000000 +començar.tv_usec)));

tornar 0;
}

Sortida:

Aquest exemple mostra que com gettimeofday () es pot utilitzar per calcular el temps d'execució d'un programa.

Conclusió

D’aquesta manera, el gettimeofday () la funció es pot utilitzar a Linux. Per portar el codi existent, el fitxer gettimeofday () es pot utilitzar la funció, però en un codi nou no s'hauria d'utilitzar. clock_gettime () es pot utilitzar la funció en lloc de gettimeofday () .