C Programmering

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

Hur man använder gettimeofday-funktionen på C-språk?
De gettimeofday () funktionen får systemets klocktid. Den aktuella tiden uttrycks i förflutna sekunder och mikrosekunder sedan 00:00:00 den 1 januari 1970 (Unix Epoch). I den här artikeln ska vi visa dig hur du använder gettimeofday () funktion i Linux. Så, låt oss komma igång.

Syntax

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

De gettimeofday () funktionen definieras i sys / tid.h rubrikfil.

Argument

Den här funktionen tar två argument:

Den 1st argumentet pekar på tidsperiod strukturera. De tidsperiod struktur deklareras enligt nedan i sys / tid.h rubrikfil:

struct timeval
time_t tv_sec; // används i sekunder
suseconds_t tv_usec; // används för mikrosekunder

Struct tidsstrukturen representerar en kalendertid. Den har två medlemmar:

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

Returnera värden

När det gäller framgång, gettimeofday () return 0, för fel returnerar funktionen -1.

Enkelt Få tid och skriva ut

#omfatta
#omfatta
int main ()
struct tidsvärde current_time;
gettimeofday (& nuvarande_tid, NULL);
printf ("sekunder:% ld \ nmicro sekunder:% ld",
aktuell tid.tv_sec, aktuell tid.tv_usec);
returnera 0;

Produktion:

Här, sys / tid.h har inkluderats i gettimeofday () funktion och tidsstruktur. De gettimeofday () -funktion ställer in tiden i strukturen för tidsvärdet (nuvarande_tid). tv_sec är det integrerade antalet sekunder som har gått sedan början av UNIX-epoken, vid midnatt UTC den 1 januari 1970 och tv_usec är ytterligare antal mikrosekunder som gått från tv_sec. Om du kör programmet bör du se utdata. Varje gång du kör programmet ändras utdata.

NULL Argumentfel

#omfatta
#omfatta
int main ()
 
struct tidsvärde current_time;
gettimeofday (NULL, NULL);
returnera 0;

Produktion:

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

Formatera aktuell tidsexempel

#omfatta
#omfatta
#omfatta
int main ()
struktur tids-tv;
time_t t;
struct tm * info;
kolbuffert [64];
 
gettimeofday (& tv, NULL);
t = tv.tv_sec;
info = lokal tid (& t);
printf ("% s", asctime (info));
strftime (buffert, buffertstorlek, "Idag är% A,% B% d.\ n ", info);
printf ("% s", buffert);
strftime (buffert, buffertstorlek, "Tiden är% I:% M% p.\ n ", info);
printf ("% s", buffert);
returnera 0;

Produktion:

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

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

De strftime () -funktionen genererar en personlig, formaterad sträng som visar datum och tid från struct tm pekare. Formatspecifikationer används för formaterad visning. Till exempel anger formatsträngen “% d-% m-% Y% H:% M:% S” datum och tid i denna form:

14-04-2020 13:09:42

Följande är konverteringsspecifikationerna som kan användas för formaterad visning:

Specifier Menande
% a Det förkortade namnet på veckodagen enligt den aktuella platsen.
% A Namnet på veckodagen enligt den aktuella platsen.
% b Namnet på den förkortade månaden enligt den aktuella platsen.
% B Hela månadens namn enligt nuvarande plats.
% c Den föredragna representationen av datum och tid för den aktuella platsen.
% d Som ett decimaltal för månadens dag (intervall 01 - 31).
% H Använd 24 timmar (intervall 00 - 23) till timmen som decimaltal.
% I Använd 12 timmar (intervall 00 - 23) till timmen som decimaltal.
% j Som ett decimaltal för årets dag (intervall 001-366).
% m Som ett decimaltal för månaden (intervall 01 - 12).
% M Minutens decimaltal.
% s Baserat på det angivna tidsvärdet, antingen 'am' eller 'pm' eller motsvarande strängar för den aktuella platsen.
% S Sekundens decimaltal.
% 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.
% y Året är decimalt men inget århundrade (sträcker sig från 00 - 99).
% Y Året är decimalt inklusive århundradet.
% Z Tidszonen.

Använda gettimeofday för att mäta programmets exekveringstid

#omfatta
#omfatta
 
int main ()
 
struktur tidsstart, slut;
gettimeofday (& start, NULL);
 
för (int i = 0; i <1e5 ; i++)

 
gettimeofday (& slut, NULL);
printf ("Det tar tid att räkna till 10 ^ 5 är:% ld mikrosekunder \ n",
((slutet.tv_sec * 1000000 + slut.tv_usec) -
(Start.tv_sec * 1000000 + start.tv_usec)));
returnera 0;

Produktion:

Detta exempel visar att hur gettimeofday () funktionen kan användas för att beräkna exekveringstiden för ett program.

Slutsats

På detta sätt gettimeofday () funktionen kan användas i Linux. För att portera 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 ().

5 bästa arkadspel för Linux
Numera är datorer seriösa maskiner som används för spel. Om du inte kan få den nya poängen vet du vad jag menar. I det här inlägget kommer du att känn...
Strid om Wesnoth 1.13.6 Utveckling släppt
Strid om Wesnoth 1.13.6 släpptes förra månaden, är den sjätte utvecklingsversionen i 1.13.x-serien och den levererar ett antal förbättringar, framför ...
Så här installerar du League Of Legends på Ubuntu 14.04
Om du gillar League of Legends är det här en möjlighet för dig att testa League of Legends. Observera att LOL stöds på PlayOnLinux om du är en Linux-a...