C Programmeren

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

Hoe de gettimeofday-functie in C-taal te gebruiken?
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

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

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

Argumenten

Deze functie heeft twee argumenten:

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

structuur    tijdstip  
time_t        tv_sec ; // seconden gebruikt
suseconds_t       tv_usec ; // gebruikt voor microseconden

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

De 2nd argument wijst op de tijdzone structuur. Het moet normaal gesproken worden ingesteld op NULL omdat: struct tijdzone is verouderd. 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

#include
#include
int hoofd()
struct timeval current_time;
gettimeofday(¤t_time, NULL);
printf("seconden: %ld\nmicro seconden: %ld",
huidige tijd.tv_sec, huidige_tijd.tv_usec);
retourneer 0;

Uitgang:

Hier, sys/tijd.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

#include
#include
int hoofd()
 
struct timeval current_time;
gettimeofday(NULL, NULL);
retourneer 0;

Uitgang:

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

Voorbeeld huidige tijd formatteren

#include
#include
#include
int hoofd()
structuur timeval tv;
tijd_t t;
struct tm *info;
char-buffer [64];
 
gettimeofday(&tv, NULL);
t = tv.tv_sec;
info = lokale tijd(&t);
printf("%s",asctime (info));
strftime (buffer, sizeof buffer, "Vandaag is %A, %B %d.\n", info);
printf("%s",buffer);
strftime (buffer, sizeof buffer, "De tijd is %I:%M %p.\n", info);
printf("%s",buffer);
retourneer 0;

Uitgang:

In dit voorbeeld ziet u hoe u datum en tijd in verschillende indelingen 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 voorwerp.

De strftime() functie genereert een gepersonaliseerde, opgemaakte string met de datum en tijd van de time 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
%een De afgekorte naam van de weekdag volgens de huidige locale.
%EEN 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 locale.
%c De voorkeursweergave van datum en tijd voor de huidige landinstelling.
%d 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.
%IK 12-uur (bereik 00 - 23) tot het uur gebruiken 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 tijdswaarde, ofwel 'am' of 'pm' of de equivalente tekenreeksen voor de huidige locale.
%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.
%y Het jaar is decimaal maar geen eeuw (bereik van 00 - 99).
%Y Het jaar is decimaal inclusief eeuw.
%Z De tijdzone.

Gettimeofday gebruiken om de uitvoeringstijd van het programma te meten

#include
#include
 
int hoofd()
 
struct timeval begin, einde;
gettimeofday(&start, NULL);
 
voor (int i = 0; i <1e5 ; i++)

 
gettimeofday(&end, NULL);
printf("De tijd die nodig is om tot 10^5 te tellen is: %ld microseconden\n",
((einde.tv_sec * 1000000 + einde.tv_usec) -
(begin.tv_sec * 1000000 + start.tv_usec)));
retourneer 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 overdragen van bestaande code, de gettimeofday() functie mag worden gebruikt, maar in nieuwe code mag deze niet worden gebruikt. clock_gettime()  functie kan worden gebruikt in plaats van gettimeofday().

SuperTuxKart voor Linux
SuperTuxKart is een geweldige titel die is ontworpen om je de Mario Kart-ervaring gratis te bieden op je Linux-systeem. Het is behoorlijk uitdagend en...
Strijd om Wesnoth Zelfstudie
The Battle for Wesnoth is een van de meest populaire open source strategiespellen die je op dit moment kunt spelen. Dit spel is niet alleen al heel la...
0 A.D. zelfstudie
Van de vele strategiespellen die er zijn, 0 A.D. slaagt erin om op te vallen als een uitgebreide titel en een zeer diep, tactisch spel ondanks dat het...