Hur använder jag gettimeofday -funktionen på C -språk?

How Use Gettimeofday Function C Language



De gettimeofday () funktion får systemets klockslag. Den aktuella tiden uttrycks i förflutna sekunder och mikrosekunder sedan 00:00:00, 1 januari 1970 (Unix Epoch). I den här artikeln kommer vi att visa dig hur du använder gettimeofday () funktion i Linux. Så, låt oss komma igång.

Syntax

intgettimeofday( strukturtid*stad, strukturtidszon*tz)

De gettimeofday () funktion definieras i sys/time.h rubrikfil.







Argument

Denna funktion tar två argument:



Den 1stargumentet pekar på tid strukturera. De tid strukturen deklareras enligt nedan i sys/time.h rubrikfil:



strukturtid{
time_t tv_sec; // används i sekunder
suseconds_t tv_usec; // används för mikrosekunder
}

Tidsstrukturen struct representerar en kalendertid. Den har två medlemmar:





  • tv_sec : Det är antalet sekunder sedan epoken.
  • tv_usec : Det är ytterligare mikrosekunder efter antal sekunders beräkning sedan epoken. .

Den 2ndargumentet pekar på tidszon strukturera. Det bör normalt sättas till NULL eftersom struct tidszon är föråldrad. Detta argument är endast för bakåtkompatibilitet.

Returvärden

På framgång, gettimeofday () return 0, för fel returnerar funktionen -1.



Enkelt Få tid och skriv ut

#omfatta
#omfatta

inthuvud() {
strukturtidsvärde aktuell_tid;
gettimeofday(&aktuell tid,NULL);
printf ('sekunder: %ld nmikrosekunder: %ld ',
aktuell tid.tv_sec,aktuell tid.tv_usec);

lämna tillbaka 0;
}

Produktion:

Här, sys/time.h har ingått för gettimeofday () funktion och tidsstruktur. De gettimeofday () funktion ställa in tiden i tidsmeddelande (aktuell_tid) strukturmedlem. tv_sec är det integrerade antalet sekunder som har gått sedan starten av UNIX -epok , vid midnatt UTC den 1 januari 1970 och tv_usec är ytterligare antal mikrosekunder som förflutit från tv_sec. Om du kör programmet bör du se utdata. Varje gång du kör programmet kommer utgången att ändras.

NULL Argumentfel

#omfatta
#omfatta

inthuvud() {

strukturtidsvärde aktuell_tid;
gettimeofday(NULL,NULL);
lämna tillbaka 0;
}

Produktion:

I detta exempel visar det första argumentet i gettimeofday () funktionen ska inte vara NULL. Sammanställningsvarning kommer om det första argumentet är NULL.

Formatera aktuell tid Exempel

#omfatta
#omfatta
#omfatta

inthuvud() {
strukturtv -tid;
time_t t;
strukturtm*info;
rödingbuffert[64];

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

info= lokal tid (&t);
printf ('%s', när som helst (info));
strftime (buffert, storlek avbuffert, 'Idag är %A, %B %d. n',info);
printf ('%s',buffert);
strftime (buffert, storlek avbuffert, 'Tiden är %I: %M %p. n',info);
printf ('%s',buffert);

lämna tillbaka 0;
}

Produktion:

I det här exemplet visas hur du skriver ut datum och tid i olika format. Det är inte särskilt lätt att representera datum från returvärdet på gettimeofday () funktion. Här, lokal tid() och strftime () funktioner används för att snyggt representera returvärdet för gettimeofday () .

De lokal tid() funktion tar ett argument, som är en referens till en pekare på tv_sec fält av struct tid och returnerar en referens till en pekare på a struct tm objekt.

De strftime () funktion genererar en anpassad, formaterad sträng som visar datum och tid från struct tm pekare. Formatspecifikatorer används för formaterad visning. Till exempel anger formatsträngen%d-%m-%Y%H:%M:%S datum och tid i detta formulär:

2020-04-14 13:09:42

Följande är konverteringsspecifikatörerna, kan användas för formaterad visning:

Specifier Menande
%till Veckodagens förkortade namn enligt nuvarande språk.
%TILL Veckodagens namn enligt nuvarande språk.
% b Namn på den förkortade månaden enligt nuvarande språk.
% B Namn på hela månaden enligt nuvarande språk.
% c Den föredragna representationen av datum och tid för nuvarande språk.
%d Som ett decimaltal för månadens dag (intervall 01 - 31).
%H Använda 24 timmar (intervall 00-23) till timmen som decimaltal.
%I Använda 12 timmar (intervall 00-23) till timmen som decimaltal.
%j Som ett decimaltal för årets dag (intervall 001-366).
%m Som decimaltal för månaden (intervall 01 - 12).
%M Minuttals decimaltal.
%p Baserat på det angivna tidsvärdet, antingen 'am' eller 'pm' eller motsvarande strängar för den aktuella platsen.
%S Det andra decimaltalet.
% x Föredragen representation av datumet för den aktuella platsen, men utan tid.
% X Föredragen representation av tiden för den aktuella platsen, men utan datum.
%och Året är decimalt men inget sekel (varierar från 00 - 99).
%OCH Året är decimaltal inklusive sekel.
%MED Tidszonen.

Använda gettimeofday för att mäta programkörningstid

#omfatta
#omfatta

inthuvud() {

strukturtidsbegränsad start,slutet;
gettimeofday(&Start,NULL);

för (inti= 0;i<1e5 ;i++) {
}

gettimeofday(&slutet,NULL);
printf ('Tiden det tar att räkna till 10^5 är: %ld mikrosekunder n',
((slutet.tv_sec * 1000000 +slutet.tv_usec) -
(Start.tv_sec * 1000000 +Start.tv_usec)));

lämna tillbaka 0;
}

Produktion:

Detta exempel visar hur gettimeofday () funktion kan användas för beräkning av körningstid för ett program.

Slutsats

På detta sätt, gettimeofday () funktion kan användas i Linux. För att överföra befintlig kod, gettimeofday () funktionen kan användas men i ny kod ska den inte användas. clock_gettime () funktionen kan användas istället för gettimeofday () .