C Programmering

Hvordan bruke gettimeofday-funksjonen på C-språk?

Hvordan bruke gettimeofday-funksjonen på C-språk?
De gettimeofday () funksjonen får systemets klokketid. Nåværende tid er uttrykt i forløpte sekunder og mikrosekunder siden 00:00:00, 1. januar 1970 (Unix Epoch). I denne artikkelen skal vi vise deg hvordan du bruker gettimeofday () funksjon i Linux. Så la oss komme i gang.

Syntaks

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

De gettimeofday () funksjon er definert i sys / tid.h topptekstfil.

Argumenter

Denne funksjonen tar to argumenter:

Den 1St argument peker på tidsalder struktur. De tidsalder struktur er erklært som nedenfor i sys / tid.h overskriftsfil:

struct timeval
time_t tv_sec; // brukt i sekunder
suseconds_t tv_usec; // brukes i mikrosekunder

Struct tidsalderstrukturen representerer en kalendertid. Den har to medlemmer:

2nd argument peker på tidssone struktur. Det bør normalt settes til NULL fordi struct tidssone er foreldet. Dette argumentet er kun for bakoverkompatibilitet.

Returner verdier

På suksess, den gettimeofday () return 0, for feil returnerer funksjonen -1.

Enkel Få tid og skriv ut

#inkludere
#inkludere
int main ()
struct tidsstrømstrømstid;
gettimeofday (& nåværende tid, NULL);
printf ("sekunder:% ld \ nmicro sekunder:% ld",
nåværende tid.tv_sec, nåværende tid.tv_usec);
retur 0;

Produksjon:

Her, sys / tid.h er inkludert for gettimeofday () funksjon og tidsstruktur. De gettimeofday () funksjon angi klokkeslettet i timeval (current_time) struktur medlem. tv_sec er det integrerte antall sekunder som har gått siden starten av UNIX-epoke, på midnatt UTC 1. januar 1970 og tv_usec er ekstra antall mikrosekunder som er gått fra tv_sec. Hvis du kjører programmet, bør du se utdataene. Hver gang du kjører programmet vil utgangen endres.

NULL Argumentfeil

#inkludere
#inkludere
int main ()
 
struktur tidsstrøm nåværende tid;
gettimeofday (NULL, NULL);
retur 0;

Produksjon:

I dette eksemplet viser det første argumentet til gettimeofday () funksjonen skal ikke være NULL. Kompilasjonsadvarsel kommer hvis det første argumentet er NULL.

Formatering av gjeldende tid

#inkludere
#inkludere
#inkludere
int main ()
struktur tidsalder tv;
time_t t;
struct tm * info;
røyebuffer [64];
 
gettimeofday (& tv, NULL);
t = tv.tv_sec;
info = lokaltid (& t);
printf ("% s", asctime (info));
strftime (buffer, bufferstørrelse, "I dag er% A,% B% d.\ n ", info);
printf ("% s", buffer);
strftime (buffer, bufferstørrelse, "Tiden er% I:% M% p.\ n ", info);
printf ("% s", buffer);
retur 0;

Produksjon:

I dette eksemplet viser hvordan du skriver ut dato og klokkeslett i forskjellige format. Det er ikke veldig enkelt å representere datoer fra returverdien av gettimeofday () funksjon . Her, lokal tid() og strftime () funksjoner brukes til å pent representere returverdien av gettimeofday ().

De lokal tid() funksjon tar et argument, som er en referanse til en peker på tv_sec innen struct tidsperiode og returnerer en referanse til en peker på a struktur tm gjenstand.

De strftime () -funksjonen vil generere en personlig, formatert streng som viser dato og klokkeslett fra struktur tm pekeren. Formatspesifikatorer brukes til formatert visning. For eksempel spesifiserer formatstrengen “% d-% m-% Y% H:% M:% S” dato og klokkeslett i dette skjemaet:

14-04-2020 13:09:42

Følgende er konverteringsspesifikasjonene som kan brukes til formatert visning:

Spesifikator Betydning
%en Det forkortede navnet på ukedagen i henhold til gjeldende sted.
%EN Navnet på ukedagen i henhold til gjeldende sted.
% b Navnet på den forkortede måneden i henhold til gjeldende sted.
% B Navnet på hele måneden i henhold til gjeldende sted.
% c Den foretrukne representasjonen av dato og klokkeslett for den nåværende lokaliteten.
% d Som et desimaltall for månedens dag (område 01 - 31).
% H Bruk 24 timer (område 00 - 23) til timen som desimaltall.
%JEG Bruk 12 timer (område 00 - 23) til timen som desimaltall.
% j Som et desimaltall for årets dag (område 001-366).
% m Som et desimaltall for måneden (område 01 - 12).
% M Desimaltallet i minuttet.
% s Basert på den angitte tidsverdien, enten 'am' eller 'pm' eller tilsvarende strenger for gjeldende sted.
% S Desimaltallet på det andre.
% x Foretrukket fremstilling av datoen for gjeldende sted, men uten tid.
% X Foretrukket fremstilling av klokkeslettet for gjeldende sted, men uten dato.
% y Året er desimal, men ikke noe århundre (fra 00 til 99).
% Y Året er desimal inkludert århundre.
% Z Tidssonen.

Bruke gettimeofday for å måle programutførelsestid

#inkludere
#inkludere
 
int main ()
 
struktur tidsriktig start, slutt;
gettimeofday (& start, NULL);
 
for (int i = 0; i <1e5 ; i++)

 
gettimeofday (& slutt, NULL);
printf ("Tiden det tar å telle til 10 ^ 5 er:% ld mikrosekunder \ n",
((slutt.tv_sec * 1000000 + slutt.tv_usec) -
(start.tv_sec * 1000000 + start.tv_usec)));
retur 0;

Produksjon:

Dette eksemplet viser at hvordan gettimeofday () funksjon kan brukes til beregning av utførelsestid for et program.

Konklusjon

På denne måten kan gettimeofday () funksjonen kan brukes i Linux. For å portere eksisterende kode, gettimeofday () funksjonen kan brukes, men i ny kode skal den ikke brukes. clock_gettime ()  funksjon kan brukes i stedet for gettimeofday ().

Kjemp om Wesnoth-opplæringen
Kampen om Wesnoth er et av de mest populære open source-strategispillene du kan spille på dette tidspunktet. Ikke bare har dette spillet vært i utvikl...
0 A.D. Opplæringen
Ut av de mange strategispillene der ute, 0 A.D. klarer å skille seg ut som en omfattende tittel og et veldig dypt, taktisk spill til tross for å være ...
Unity3D opplæring
Introduksjon til Unity 3D Unity 3D er en kraftig spillutviklingsmotor. Det er kryssplattform, det er det lar deg lage spill for mobil, web, stasjonær ...