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 timevaltime_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:
- tv_sec : Det är antalet sekunder sedan epoken.
- tv_usec : Det är ytterligare mikrosekunder efter antal sekunder beräkning sedan epoken ..
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:42Fö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 ().