Kuidas kasutada funktsiooni gettimeofday C keeles?

How Use Gettimeofday Function C Language



The gettimeofday () funktsioon saab süsteemi kellaaja. Praegust aega väljendatakse möödunud sekundites ja mikrosekundites alates 1. jaanuarist 1970 00:00:00 (Unix Epoch). Selles artiklis näitame teile, kuidas seda kasutada gettimeofday () funktsioon Linuxis. Niisiis, alustame.

Süntaks

intpäeva algus( struktuuriajaline*linn, struktuuriajavöönd*tz)

The gettimeofday () funktsioon on määratletud sys/time.h päisefail.







Argumendid

Sellel funktsioonil on kaks argumenti:



1stargument viitab ajaline struktuur. The ajaline struktuur on deklareeritud järgmiselt sys/time.h päisefail:



struktuuriajaline{
aeg_t tv_sec; // kasutatakse sekundit
suseconds_t tv_usec; // kasutatakse mikrosekundite jaoks
}

Struktuuri ajaline struktuur tähistab kalendriaega. Sellel on kaks liiget:





  • tv_sec : See on sekundite arv ajastust.
  • tv_usec : See on täiendav mikrosekund pärast sekundite arvu arvutamist ajast. .

2ndargument viitab ajavöönd struktuur. Tavaliselt peaks see olema NULL, sest struktuuri ajavöönd on vananenud. See argument puudutab ainult tagurpidi ühilduvust.

Tagastab väärtused

Edu kohta, gettimeofday () tagastab 0, ebaõnnestumise korral tagastab funktsioon -1.



Lihtne hankida aega ja printida

#kaasake
#kaasake

intpeamine() {
struktuuritimeval current_time;
päeva algus(&praegune_aeg,NULL);
printf ('sekundit: %ld nmikrosekundid: %ld ',
praegune_aeg.tv_sec,praegune_aeg.tv_usec);

tagasi 0;
}

Väljund:

Siin, sys/time.h jaoks on kaasatud gettimeofday () funktsioon ja ajaline struktuur. The gettimeofday () funktsioon määrab aja timeval (current_time) struktuuri liikmes. tv_sec on algusest möödunud sekundite lahutamatu arv UNIXi ajastu , keskööl UTC 1. jaanuaril 1970 ja tv_usec on täiendav arv mikrosekundeid, mis on möödunud ajast tv_sec. Kui käivitate programmi, peaksite nägema väljundit. Iga kord, kui programmi käivitate, muutub väljund.

NULL argumendi viga

#kaasake
#kaasake

intpeamine() {

struktuuritimeval current_time;
päeva algus(NULL,NULL);
tagasi 0;
}

Väljund:

Selles näites on näidatud selle esimene argument gettimeofday () funktsioon ei tohiks olla NULL. Kompileerimise hoiatus tuleb, kui esimene argument on NULL.

Praeguse aja vormindamise näide

#kaasake
#kaasake
#kaasake

intpeamine() {
struktuuriajaline televiisor;
aeg_t t;
struktuuritm*info;
süsipuhver[64];

päeva algus(&TV,NULL);
t=TV.tv_sec;

info= kohalik aeg (&t);
printf ('%s', sama palju aega (info));
strftime (puhver, suuruspuhver, 'Täna on %A, %B %d. n',info);
printf ('%s',puhver);
strftime (puhver, suuruspuhver, 'Aeg on %I: %M %p. n',info);
printf ('%s',puhver);

tagasi 0;
}

Väljund:

Selles näites on näidatud, kuidas printida kuupäeva ja kellaaega erinevas vormingus. Tagastamisväärtusest kuupäevi pole väga lihtne esitada gettimeofday () funktsiooni. Siin, kohalik aeg() ja strftime () Funktsioone kasutatakse ilusti tagastamisväärtuse esitamiseks gettimeofday () .

The kohalik aeg() funktsioon võtab argumendi, mis on viide kursorile tv_sec väli struktuuri ajaline ja tagastab viite a -kursorile struktuuri tm objekti.

The strftime () funktsioon loob isikupärastatud vormindatud stringi, mis näitab kuupäeva ja kellaaega struktuuri tm osuti. Vormindatud kuvamiseks kasutatakse vormingu spetsifikatsioone. Näiteks vormindustring%d-%m-%Y%H:%M:%S määrab kuupäeva ja kellaaja sellisel kujul:

14.04.2020 13:09:42

Vormindatud kuvamiseks võib kasutada järgmisi konversioonide spetsifikatsioone:

Täpsustaja Tähendus
%kuni Nädalapäeva lühendatud nimi vastavalt praegusele lokaadile.
%TO Nädalapäeva nimi vastavalt praegusele lokaadile.
% b Praeguse lokaadi järgi lühendatud kuu nimi.
% B Kogu kuu nimi vastavalt praegusele lokaadile.
% c Praeguse lokaadi kuupäeva ja kellaaja eelistatud esitus.
%d Kuupäeva kümnendarvuna (vahemik 01–31).
%H Kasutades kümnendarvuna 24 tundi (vahemik 00–23) kuni tund.
%Mina Kasutades kümnendarvuna 12 tundi (vahemik 00–23) kuni tund.
%j Aastapäeva kümnendarvuna (vahemik 001-366).
%m Kuu kümnendarvuna (vahemik 01–12).
%M Minuti kümnendarv.
%lk Põhineb määratud ajaväärtusel kas „am” või „pm” või samaväärsed stringid praeguse lokaadi jaoks.
%S Sekundi kümnendarv.
% x Praeguse lokaadi kuupäeva eelistatud esitus, kuid ilma kellaajata.
% X Praeguse lokaadi aja eelistatav esitus, kuid ilma kuupäevata.
%ja Aasta on kümnendkoht, kuid sajandit pole (vahemikus 00–99).
%JA Aasta on kümnendarv, sealhulgas sajand.
%KOOS Ajavöönd.

Kasutades gettimeofday programmi täitmise aja mõõtmiseks

#kaasake
#kaasake

intpeamine() {

struktuuriajaline algus,lõpp;
päeva algus(&alustada,NULL);

eest (inti= 0;i<1e5 ;i++) {
}

päeva algus(&lõpp,NULL);
printf ('10^5 -ni lugemiseks kuluv aeg on: %ld mikrosekundit n',
((lõpp.tv_sec * 10 000 000 +lõpp.tv_usec) -
(alustada.tv_sec * 10 000 000 +alustada.tv_usec)));

tagasi 0;
}

Väljund:

See näide näitab, kuidas gettimeofday () funktsiooni saab kasutada programmi täitmisaja arvutamiseks.

Järeldus

Sel viisil, gettimeofday () funktsiooni võib kasutada Linuxis. Olemasoleva koodi teisaldamiseks gettimeofday () funktsiooni võib kasutada, kuid uues koodis ei tohiks seda kasutada. clock_gettime () asemel võib kasutada funktsiooni gettimeofday () .