Hvordan bruke gettimeofday -funksjonen på C -språk?

How Use Gettimeofday Function C Language



De gettimeofday () funksjonen får systemets klokketid. Den nåværende tiden er uttrykt i forløpne sekunder og mikrosekunder siden 00:00:00, 1. januar 1970 (Unix Epoch). I denne artikkelen skal vi vise deg hvordan du bruker gettimeofday () funksjon i Linux. Så, la oss komme i gang.

Syntaks

intgettimeofday( strukturtid*by, strukturtidssone*tz)

De gettimeofday () funksjon er definert i sys/time.h toppfil.







Argumenter

Denne funksjonen tar to argumenter:



Den 1stargumentet peker på tid struktur. De tid strukturen er deklarert som nedenfor i sys/time.h topptekstfil:



strukturtid{
time_t tv_sek; // brukt i sekunder
suseconds_t tv_usec; // brukt i mikrosekunder
}

Tidsstrukturen struct representerer en kalendertid. Den har to medlemmer:





  • tv_sec : Det er antall sekunder siden epoken.
  • tv_usec : Det er ekstra mikrosekunder etter antall sekunders beregning siden epoken. .

Den 2ndargumentet peker på tidssone struktur. Det bør normalt settes til NULL fordi struct tidssone er foreldet. Dette argumentet er bare for bakoverkompatibilitet.

Returner verdier

På suksess, gettimeofday () return 0, for feil returnerer funksjonen -1.



Enkelt Få tid og utskrift

#inkludere
#inkludere

inthoved-() {
strukturtimeval current_time;
gettimeofday(&nåværende tid,NULL);
printf ('sekunder: %ld nmikrosekunder: %ld ',
nåværende tid.tv_sec,nåværende tid.tv_usec);

komme tilbake 0;
}

Produksjon:

Her, sys/time.h har blitt inkludert for gettimeofday () funksjon og tidsstruktur. De gettimeofday () funksjon angi tiden i tidsmedlem (current_time) strukturmedlem. tv_sec er det integrerte antallet sekunder som har gått siden starten av UNIX -epoke , ved midnatt UTC 1. januar 1970 og tv_usec er et ekstra antall mikrosekunder som har gått fra tv_sec. Hvis du kjører programmet, bør du se utgangen. Hver gang du kjører programmet, endres utgangen.

NULL Argumentfeil

#inkludere
#inkludere

inthoved-() {

strukturtimeval current_time;
gettimeofday(NULL,NULL);
komme tilbake 0;
}

Produksjon:

I dette eksemplet viser det første argumentet til gettimeofday () funksjonen skal ikke være NULL. Samlingsvarsel kommer hvis det første argumentet er NULL.

Formatering av gjeldende klokkeslett

#inkludere
#inkludere
#inkludere

inthoved-() {
strukturtideval tv;
time_t t;
strukturtm*info;
røyebuffer[64];

gettimeofday(&TV,NULL);
t=TV.tv_sec;

info= lokal tid (&t);
printf ('%s', når som helst (info));
strftime (buffer, størrelsen avbuffer, 'I dag er %A, %B %d. n',info);
printf ('%s',buffer);
strftime (buffer, størrelsen avbuffer, 'Tiden er %I: %M %s. n',info);
printf ('%s',buffer);

komme tilbake 0;
}

Produksjon:

I dette eksemplet viser du hvordan du skriver ut dato og klokkeslett i et annet format. Det er ikke veldig lett å representere datoer fra returverdien på gettimeofday () funksjon. Her, lokal tid() og strftime () funksjoner brukes til å representere returverdien på gettimeofday () .

De lokal tid() funksjon tar et argument, som er en referanse til en peker på tv_sec innen struktur tid og returnerer en referanse til en peker på a struct tm gjenstand.

De strftime () funksjonen vil generere en personlig, formatert streng som viser dato og klokkeslett fra struct tm pekeren. Formatspesifikatorer brukes for formatert visning. For eksempel angir formatstrengen%d-%m-%Y%H:%M:%S dato og klokkeslett i dette skjemaet:

04-14-2020 13:09:42

Følgende er konverteringsspesifikatorene, kan brukes for formatert skjerm:

Spesifikator Betydning
%til Det forkortede navnet på ukedagen i henhold til gjeldende språk.
%TIL Navnet på ukedagen i henhold til gjeldende språk.
% b Navnet på den forkortede måneden i henhold til gjeldende språk.
% B Navnet på hele måneden i henhold til nåværende språk.
% c Den foretrukne representasjonen av dato og klokkeslett for den nåværende lokaliteten.
%d Som et desimaltall for månedsdagen (område 01 - 31).
%H Bruk 24 timer (område 00-23) til timen som desimalnummer.
%JEG Bruk 12 timer (område 00-23) til timen som desimalnummer.
%j Som et desimaltall for dagen i året (område 001-366).
%m Som et desimaltall for måneden (område 01 - 12).
%M Desimaltallet i minuttet.
%s Basert på den angitte tidsverdien, enten ‘am’ eller ‘pm’ eller de tilsvarende strengene for gjeldende språk.
%S Desimalnummeret til det andre.
% x Foretrukket representasjon av datoen for gjeldende språk, men uten tid.
% X Foretrukket fremstilling av tidspunktet for gjeldende språk, men uten dato.
%og Året er desimal, men ingen århundre (varierer fra 00 - 99).
%OG Året er desimal inkludert århundre.
%MED Tidssonen.

Bruke gettimeofday for å måle programmets gjennomføringstid

#inkludere
#inkludere

inthoved-() {

strukturtidsbegrensning,slutt;
gettimeofday(&start,NULL);

til (intJeg= 0;Jeg<1e5 ;Jeg++) {
}

gettimeofday(&slutt,NULL);
printf ('Tiden det tar å telle til 10^5 er: %ld mikrosekunder n',
((slutt.tv_sec * 1000000 +slutt.tv_usec) -
(start.tv_sec * 1000000 +start.tv_usec)));

komme tilbake 0;
}

Produksjon:

Dette eksemplet viser hvordan gettimeofday () funksjonen kan brukes til å beregne utførelsestiden for et program.

Konklusjon

På denne måten vil gettimeofday () funksjonen kan brukes i Linux. For overføring av eksisterende kode, gettimeofday () funksjonen kan brukes, men i ny kode skal den ikke brukes. clock_gettime () funksjonen kan brukes i stedet for gettimeofday () .