Hvordan bruke getTimeOfDay -funksjon på C -språk?

Hvordan bruke getTimeOfDay -funksjon på C -språk?
De GetTimeOfDay () Funksjonen får systemets klokketid. Den nåværende tiden 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 Timezone *TZ)

De GetTimeOfDay () Funksjon er definert i SYS/TID.h headerfil.

Argumenter

Denne funksjonen tar to argumenter:

1st argument peker på TimeVal struktur. De TimeVal struktur er erklært som nedenfor i SYS/TID.h headerfil:

struct TimeVal
TIME_T TV_SEC; // brukt i sekunder
SUSECONDS_T TV_USEC; // brukt til mikrosekunder

Struct Tideval -strukturen representerer en kalendertid. Den har to medlemmer:

  • TV_sec : Det er antall sekunder siden epoken.
  • TV_USEC : Det er ytterligere mikrosekunder etter antall sekunders beregning siden epoken ..

De 2nd argument peker på tidssone struktur. Det skal normalt settes til null fordi Struct Timezone er foreldet. Dette argumentet er kun for bakoverkompatibilitet.

Returverdier

Om suksess, den GetTimeOfDay () Return 0, for svikt returnerer funksjonen -1.

Enkel få tid og utskrift

#inkludere
#inkludere
int main ()
struct timeeval current_time;
GetTimeOfDay (& Current_Time, NULL);
printf ("sekunder: %ld \ nmicro sekunder: %ld",
nåværende tid.TV_sec, Current_time.TV_USEC);
retur 0;

Produksjon:

Her, SYS/TID.h har blitt inkludert for GetTimeOfDay () funksjon og tidsvalstruktur. De GetTimeOfDay () Funksjon Angi tiden i TimeVal (Current_Time) Structure Member. TV_sec er det integrerte antall sekunder som er gått siden starten av Unix Epoch, På Midnight UTC 1. januar 1970 og TV_USEC er et ekstra antall mikrosekunder som går fra TV_sec. Hvis du kjører programmet, bør du se utdataene. Hver gang du kjører programmet vil utdataene endre seg.

NULL -argumentfeil

#inkludere
#inkludere
int main ()
struct timeeval current_time;
GetTimeOfDay (NULL, NULL);
retur 0;

Produksjon:

I dette eksemplet viser det første argumentet om GetTimeOfDay () funksjonen skal ikke være null. Samlingsadvarsel vil komme hvis det første argumentet er null.

Formatering av gjeldende tidseksempel

#inkludere
#inkludere
#inkludere
int main ()
Struct TimeVal TV;
time_t t;
struct tm *info;
char buffer [64];
GetTimeOfDay (& TV, NULL);
T = TV.TV_sec;
info = localime (& t);
printf ("%s", asctime (info));
strftime (buffer, størrelse av buffer, "i dag er %a, %b %d.\ n ", info);
printf ("%s", buffer);
strftime (buffer, størrelse av buffer, "Tiden er %i: %m %p.\ n ", info);
printf ("%s", buffer);
retur 0;

Produksjon:

I dette eksemplet viser hvordan du skriver ut dato og tid 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 i TV_sec innen Struct TimeVal og returnerer en referanse til en peker av en struct tm gjenstand.

De StrfTime () funksjonen vil generere en personlig, formatert streng som viser dato og klokkeslett fra struct tm peker. Formatspesifikasjoner brukes til formatert display. 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, kan brukes til formatert visning:

Spesifikasjon Betydning
%en Ukedagens forkortede navn i henhold til det nåværende sted.
%EN Ukedagens navn i henhold til det nåværende sted.
%b Navn på den forkortede måneden i henhold til det nåværende sted.
%B Navn på hele måneden i henhold til nåværende sted.
%c Den foretrukne representasjonen av dato og tid for det nåværende sted.
%d Som et desimaltall for månedens dag (rekkevidde 01 - 31).
%H Bruker 24 -timers (område 00 - 23) til timen som desimaltall.
%JEG Bruker 12 -timers (område 00 - 23) til timen som desimaltall.
%J Som et desimaltall for året av året (Range 001-366).
%m Som et desimaltall for måneden (rekkevidde 01 - 12).
%M Desimalnummeret til minuttet.
%p Basert på den spesifiserte tidsverdien, enten 'AM' eller 'PM' eller de tilsvarende strengene for dagens sted.
%S Desimalnummeret til det andre.
%x Foretrukket representasjon av datoen for dagens sted, men uten tid.
%X Foretrukket representasjon av tiden for dagens sted, men uten dato.
%y Året er desimal, men ingen århundre (spenner fra 00 - 99).
%Y Året er desimal inkludert århundre.
%Z Tidssonen.

Bruker GetTimeOfDay for å måle utførelsestid for programmet

#inkludere
#inkludere
int main ()
Struct TimeVal Start, slutt;
GetTimeOfDay (& Start, NULL);
for (int i = 0; i <1e5 ; i++)

GetTimeOfDay (& End, NULL);
printf ("tid tatt for å telle til 10^5 er: %ld mikro sekunder \ 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 GetTimeOfDay () Funksjon kan brukes i Linux. For å porttere eksisterende kode, GetTimeOfDay () funksjon kan brukes, men i ny kode skal den ikke brukes. Clock_GetTime () funksjon kan brukes i stedet for GetTimeOfDay ().