Hvordan bruges gettimeofday -funktionen på C -sprog?

How Use Gettimeofday Function C Language



Det gettimeofday () funktion får systemets ur tid. Den aktuelle tid udtrykkes i forløbne sekunder og mikrosekunder siden 00:00:00, 1. januar 1970 (Unix Epoch). I denne artikel vil vi vise dig, hvordan du bruger gettimeofday () funktion i Linux. Så lad os komme i gang.

Syntaks

intgettimeofday( strukturtidsalder*by, strukturtidszone*tz)

Det gettimeofday () funktion er defineret i sys/time.h header -fil.





Argumenter

Denne funktion tager to argumenter:



Den 1stargument peger på tidsalder struktur. Det tidsalder struktur er angivet som nedenfor i sys/time.h header -fil:



strukturtidsalder{
time_t tv_sek; // brugt i sekunder
suseconds_t tv_usec; // bruges til mikrosekunder
}

Strukturtidsstrukturen repræsenterer en kalendertid. Det har to medlemmer:





  • tv_sek : Det er antallet af sekunder siden epoken.
  • tv_usec : Det er yderligere mikrosekunder efter antal sekunders beregning siden epoken. .

Den 2ndargument peger på tidszone struktur. Det skal normalt sættes til NULL fordi struktur tidszone er forældet. Dette argument er kun for bagudkompatibilitet.

Returværdier

På succes, den gettimeofday () return 0, ved fejl returnerer funktionen -1.



Simpel Få tid og udskriv

#omfatte
#omfatte

intvigtigste() {
strukturtidsværdi aktuel_tid;
gettimeofday(&nuværende tid,NUL);
printf ('sekunder: %ld nmikrosekunder: %ld ',
nuværende tid.tv_sek,nuværende tid.tv_usec);

Vend tilbage 0;
}

Produktion:

Her, sys/time.h er inkluderet for gettimeofday () funktion og tidsstruktur. Det gettimeofday () funktion indstil tiden i tidsværdi (nuværende_tid) strukturmedlem. tv_sec er det integrerede antal sekunder, der er gået siden starten af UNIX -epoke , ved midnat UTC den 1. januar 1970 og tv_usec er et yderligere antal mikrosekunder, der er forløbet fra tv_sec. Hvis du kører programmet, skal du se output. Hver gang du kører programmet, ændres output.

NULL Argumentfejl

#omfatte
#omfatte

intvigtigste() {

strukturtidsværdi aktuel_tid;
gettimeofday(NUL,NUL);
Vend tilbage 0;
}

Produktion:

I dette eksempel viser det første argument af gettimeofday () funktionen bør ikke være NULL. Kompilationsadvarsel kommer, hvis det første argument er NULL.

Formatering af aktuel tid Eksempel

#omfatte
#omfatte
#omfatte

intvigtigste() {
strukturtids -tv;
time_t t;
strukturtm*info;
forkælelsebuffer[64];

gettimeofday(&tv,NUL);
t=tv.tv_sek;

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

Vend tilbage 0;
}

Produktion:

I dette eksempel viser, hvordan du udskriver dato og klokkeslæt i et andet format. Det er ikke meget let at repræsentere datoer fra returværdien på gettimeofday () funktion. Her, lokal tid() og strftime () funktioner bruges til pænt at repræsentere returværdien af gettimeofday () .

Det lokal tid() funktion tager et argument, som er en reference til en markør af tv_sek felt af struktur tid og returnerer en reference til en markør af a struktur tm objekt.

Det strftime () funktion genererer en personlig, formateret streng, der viser dato og klokkeslæt fra struktur tm markør. Formatspecifikationer bruges til formateret display. For eksempel angiver formatstrengen%d-%m-%Y%H:%M:%S dato og klokkeslæt i denne form:

04-14-2020 13:09:42

Følgende er konverteringsspecifikationerne, der kan bruges til formateret display:

Specifikation Betyder
%til Uredagens forkortede navn i henhold til den aktuelle lokalitet.
%TIL Ugedagens navn i henhold til den aktuelle lokalitet.
% b Navn på den forkortede måned i henhold til den aktuelle lokalitet.
% B Navn på hele måneden i henhold til nuværende lokalitet.
% c Den foretrukne repræsentation af dato og klokkeslæt for den aktuelle lokalitet.
%d Som et decimaltal for månedens dag (interval 01 - 31).
%H Brug af 24 timer (område 00-23) til timen som decimaltal.
%JEG Brug af 12 timer (område 00-23) til timen som decimaltal.
%j Som et decimaltal for årets dag (område 001-366).
%m Som et decimaltal for måneden (område 01 - 12).
%M Minimalens decimaltal.
%s Baseret på den angivne tidsværdi, enten 'am' eller 'pm' eller de tilsvarende strenge for den aktuelle lokalitet.
%S Det andet decimaltal.
% x Foretrukken repræsentation af datoen for den aktuelle lokalitet, men uden tid.
% X Foretrukket repræsentation af tidspunktet for den aktuelle lokalitet, men uden dato.
%og Året er decimalt, men intet århundrede (spænder fra 00 - 99).
%OG Året er decimaltal inklusive århundrede.
%MED Tidszonen.

Brug af gettimeofday til at måle programudførelsestid

#omfatte
#omfatte

intvigtigste() {

strukturtidsbegrænset start,ende;
gettimeofday(&Start,NUL);

til (intjeg= 0;jeg<1e5 ;jeg++) {
}

gettimeofday(&ende,NUL);
printf ('Tiden det tager at tælle til 10^5 er: %ld mikrosekunder n',
((ende.tv_sek * 1000000 +ende.tv_usec) -
(Start.tv_sek * 1000000 +Start.tv_usec)));

Vend tilbage 0;
}

Produktion:

Dette eksempel viser, hvordan gettimeofday () funktion kan bruges til beregning af udførelsestiden for et program.

Konklusion

På denne måde vil gettimeofday () funktion kan bruges i Linux. For at overføre eksisterende kode skal gettimeofday () funktion kan bruges, men i ny kode skal den ikke bruges. clock_gettime () funktion kan bruges i stedet for gettimeofday () .