Hoe de gettimeofday-functie in C-taal te gebruiken?

How Use Gettimeofday Function C Language



De gettimeofday() functie krijgt de kloktijd van het systeem. De huidige tijd wordt uitgedrukt in verstreken seconden en microseconden sinds 00:00:00, 1 januari 1970 (Unix Epoch). In dit artikel laten we u zien hoe u de gettimeofday() functie in Linux. Dus laten we beginnen.

Syntaxis

intgettimeofday( structurerentijdswaarde*stad, structurerentijdzone*tz)

De gettimeofday() functie is gedefinieerd in sys/time.h header-bestand.







Argumenten

Deze functie heeft twee argumenten:



de 1NSargument wijst op de tijdswaarde structuur. De tijdswaarde structuur wordt gedeclareerd zoals hieronder in sys/time.h header-bestand:



structurerentijdswaarde{
time_t tv_sec; // seconden gebruikt
suseconds_t tv_usec; // gebruikt voor microseconden
}

De structurele tijdsstructuur vertegenwoordigt een kalendertijd. Het heeft twee leden:





  • tv_sec : Het is het aantal seconden sinds het tijdperk.
  • tv_usec :Het is extra microseconden na berekening van het aantal seconden sinds het tijdperk. .

De 2ndargument wijst op de tijdzone structuur. Het moet normaal gesproken worden ingesteld op NULL omdat: struct tijdzone is achterhaald. Dit argument is alleen voor achterwaartse compatibiliteit.

Retourwaarden

Bij succes, de gettimeofday() retourneer 0, voor mislukking retourneert de functie -1.



Eenvoudig tijd ophalen en afdrukken

#erbij betrekken
#erbij betrekken

inthoofd() {
structurerentijdwaarde huidige_tijd;
gettimeofday(&huidige tijd,NUL);
printf ('seconden : %ldNmicroseconden: %ld',
huidige tijd.tv_sec,huidige tijd.tv_usec);

opbrengst 0;
}

Uitgang:

Hier, sys/time.h is opgenomen voor gettimeofday() functie en tijdsstructuur. De gettimeofday() functie zet de tijd in timeval (current_time) structuurlid. tv_sec is het gehele aantal seconden dat is verstreken sinds het begin van de UNIX-tijdperk , om middernacht UTC op 1 januari 1970 en tv_usec is een extra aantal microseconden verstreken sinds tv_sec. Als u het programma uitvoert, zou u de uitvoer moeten zien. Elke keer dat u het programma uitvoert, verandert de uitvoer.

NULL-argumentfout

#erbij betrekken
#erbij betrekken

inthoofd() {

structurerentijdwaarde huidige_tijd;
gettimeofday(NUL,NUL);
opbrengst 0;
}

Uitgang:

In dit voorbeeld toont dat eerste argument van de gettimeofday() functie mag niet NULL zijn. Er komt een compilatiewaarschuwing als het eerste argument NULL is.

Voorbeeld huidige tijd formatteren

#erbij betrekken
#erbij betrekken
#erbij betrekken

inthoofd() {
structurerentimeval tv;
time_t t;
structurerentm*info;
charbuffer[64];

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

info= lokale tijd (&t);
printf ('%s', asctime (info));
strftime (buffer, De grootte vanbuffer, 'Vandaag is het %A, %B %d.N',info);
printf ('%s',buffer);
strftime (buffer, De grootte vanbuffer, 'De tijd is %I:%M %p.N',info);
printf ('%s',buffer);

opbrengst 0;
}

Uitgang:

In dit voorbeeld wordt getoond hoe u datum en tijd in verschillende formaten kunt afdrukken. Het is niet erg eenvoudig om datums weer te geven uit de retourwaarde van gettimeofday() functie. Hier, lokale tijd() en strftime() functies worden gebruikt om de retourwaarde van mooi weer te geven gettimeofday() .

De lokale tijd() functie heeft een argument nodig, wat een verwijzing is naar een pointer van de tv_sec gebied van structuur tijdwaarde en retourneert een verwijzing naar een pointer van a struct tm object.

De strftime() functie genereert een gepersonaliseerde, opgemaakte string met de datum en tijd van de struct tm wijzer. Formaatspecificaties worden gebruikt voor geformatteerde weergave. De notatiereeks %d-%m-%Y %H:%M:%S specificeert bijvoorbeeld de datum en tijd in deze vorm:

14-04-2020 13:09:42

Hieronder volgen de conversiespecificaties die kunnen worden gebruikt voor geformatteerde weergave:

Specificatie: Betekenis
%tot De afgekorte naam van de weekdag volgens de huidige landinstelling.
%TOT De naam van de weekdag volgens de huidige landinstelling.
% B Naam van de afgekorte maand volgens de huidige landinstelling.
% B Naam van de volledige maand volgens huidige landinstelling.
% C De voorkeursweergave van datum en tijd voor de huidige landinstelling.
%NS Als een decimaal getal voor de dag van de maand (bereik 01 – 31).
%H 24 uur (bereik 00 – 23) tot het uur gebruiken als decimaal getal.
%L Gebruik van 12-uur (bereik 00 – 23) tot het uur als decimaal getal.
%J Als een decimaal getal voor de dag van het jaar (bereik 001-366).
%m Als een decimaal getal voor de maand (bereik 01 – 12).
%M Het decimale getal van de minuut.
%P Gebaseerd op de opgegeven tijdwaarde, ofwel 'am' of 'pm' of de equivalente tekenreeksen voor de huidige landinstelling.
%S Het decimale getal van de seconde.
% x Voorkeursweergave van de datum voor de huidige landinstelling, maar zonder tijd.
% X Voorkeursweergave van de tijd voor de huidige landinstelling, maar zonder datum.
%en Het jaar is decimaal, maar geen eeuw (bereik van 00 - 99).
%EN Het jaar is decimaal inclusief eeuw.
%MET De tijdzone.

Gettimeofday gebruiken om de uitvoeringstijd van het programma te meten

#erbij betrekken
#erbij betrekken

inthoofd() {

structurerentijdsbegin,einde;
gettimeofday(&begin,NUL);

voor (intl= 0;l<1e5 ;l++) {
}

gettimeofday(&einde,NUL);
printf ('Tijd om tot 10^5 te tellen is: %ld microsecondenN',
((einde.tv_sec * 1000000 +einde.tv_usec) -
(begin.tv_sec * 1000000 +begin.tv_usec)));

opbrengst 0;
}

Uitgang:

Dit voorbeeld laat zien dat hoe: gettimeofday() functie kan worden gebruikt voor het berekenen van de uitvoeringstijd van een programma.

Conclusie

Op deze manier wordt de gettimeofday() functie kan worden gebruikt in Linux. Voor het overzetten van bestaande code, de gettimeofday() functie kan worden gebruikt, maar in nieuwe code mag deze niet worden gebruikt. clock_gettime() functie kan worden gebruikt in plaats van gettimeofday() .