Kuinka käyttää gettimeofday -toimintoa C -kielellä?

How Use Gettimeofday Function C Language



The päivän aika () -toiminto saa järjestelmän kellonajan. Kellonaika ilmaistaan ​​kuluneina sekunteina ja mikrosekunteina 1. tammikuuta 1970 (00:00:00) jälkeen (Unix Epoch). Tässä artikkelissa aiomme näyttää sinulle, kuinka käyttää päivän aika () toiminto Linuxissa. Aloitetaan siis.

Syntaksi

intpäivän hetki( rakenneaikaväli*kaupunki, rakenneaikavyöhyke*tz)

The päivän aika () toiminto on määritelty kohdassa sys/aika. h otsikkotiedosto.







Argumentit

Tämä funktio vaatii kaksi argumenttia:



1stargumentti viittaa siihen aikaväli rakenne. The aikaväli rakenne on ilmoitettu alla sys/aika. h otsikkotiedosto:



rakenneaikaväli{
aika_t tv_sec; // käytetään sekuntia
suseconds_t tv_usec; // käytetään mikrosekunneissa
}

Strukturien aikamuotorakenne edustaa kalenteriaikaa. Siinä on kaksi jäsentä:





  • tv_sec : Se on sekuntien määrä aikakaudesta.
  • tv_usec : Se on lisämikrosekuntia sekuntien lukumäärän laskemisen jälkeen. .

2toinenargumentti viittaa siihen aikavyöhyke rakenne. Sen pitäisi yleensä olla NULL, koska rakenteen aikavyöhyke on vanhentunut. Tämä argumentti koskee vain taaksepäin yhteensopivuutta.

Palauta arvot

Menestyksessä, päivän aika () palauta 0, epäonnistumisen yhteydessä funktio palauttaa -1.



Yksinkertainen aika ja tulostus

#sisältää
#sisältää

inttärkein() {
rakennetimeval current_time;
päivän hetki(&tämänhetkinen aika,TYHJÄ);
printf ('sekuntia: %ld nmikrosekuntia: %ld ',
tämänhetkinen aika.tv_sec,tämänhetkinen aika.tv_usec);

palata 0;
}

Lähtö:

Tässä, sys/aika. h on sisällytetty päivän aika () toiminto ja aika -rakenne. The päivän aika () toiminto asettaa ajan timeval (current_time) -rakennejäsenessä. tv_sec on integraalinen sekuntimäärä, joka on kulunut UNIX -aikakausi , keskiyöllä UTC 1. tammikuuta 1970 ja tv_usec on lisämäärä mikrosekunteja, jotka ovat kuluneet tv_sec: stä. Jos suoritat ohjelman, sinun pitäisi nähdä tulos. Joka kerta kun suoritat ohjelman, lähtö muuttuu.

NULL -argumenttivirhe

#sisältää
#sisältää

inttärkein() {

rakennetimeval current_time;
päivän hetki(TYHJÄ,TYHJÄ);
palata 0;
}

Lähtö:

Tässä esimerkissä näkyy ensimmäinen argumentti päivän aika () -toiminnon ei pitäisi olla NULL. Kokoamisvaroitus tulee, jos ensimmäinen argumentti on NULL.

Esimerkki nykyisen ajan muotoilusta

#sisältää
#sisältää
#sisältää

inttärkein() {
rakennetimeval tv;
aika_t t;
rakennetm*tiedot;
hiiltyäpuskuri[64];

päivän hetki(&TV,TYHJÄ);
t=TV.tv_sec;

tiedot= paikallinen aika (&t);
printf ('%s', yhtä aikaa (tiedot));
strftime (puskuri, kokopuskuri, 'Tänään on %A, %B %d. n'',tiedot);
printf ('%s',puskuri);
strftime (puskuri, kokopuskuri, 'Aika on %I: %M %p. n'',tiedot);
printf ('%s',puskuri);

palata 0;
}

Lähtö:

Tässä esimerkissä näytetään päivämäärän ja kellonajan tulostaminen eri muodossa. Ei ole kovin helppoa esittää päivämääriä arvon palautusarvosta päivän aika () toiminto. Tässä, paikallinen aika() ja strftime () funktioita käytetään kauniisti esittämään palautusarvo päivän aika () .

The paikallinen aika() funktio ottaa argumentin, joka viittaa osoittimeen tv_sec kenttä rakenteen aikavalinta ja palauttaa viittauksen osoittimeen a rakenne tm esine.

The strftime () -toiminto luo mukautetun, muotoillun merkkijonon, joka näyttää päivämäärän ja kellonajan rakenne tm osoitin. Muotomääritteitä käytetään muotoiltuun näyttöön. Esimerkiksi muotoilumerkkijono%d-%m-%Y%H:%M:%S määrittää päivämäärän ja kellonajan tässä muodossa:

14.4.2020 13:09:42

Seuraavat ovat konversiomääritteitä, joita voidaan käyttää muotoiltuun näyttöön:

Määrittäjä Merkitys
% - Arkipäivän lyhennetty nimi nykyisen maan mukaan.
%TO Arkipäivän nimi nykyisen maan mukaan.
% b Nykyisen maan mukainen lyhennetyn kuukauden nimi.
% B Koko kuukauden nimi nykyisen maan mukaan.
% c Päivämäärän ja kellonajan edullinen esitys nykyiselle alueelle.
%d Kuukauden desimaalilukuna (alue 01-31).
%H Käyttämällä 24 tuntia (alue 00-23) tuntiin desimaalilukuna.
%Minä Käytä 12 tuntia (alue 00-23) tuntiin desimaalilukuna.
%j Vuoden desimaalilukuna (vaihteluväli 001-366).
%m Kuukauden desimaalilukuna (alue 01-12).
%M Minuutin desimaaliluku.
%s Määritetyn aika -arvon perusteella joko 'am' tai 'pm' tai vastaavat merkkijonot nykyiselle alueelle.
%S Toisen desimaaliluku.
% x Nykyisen sijainnin päivämäärän ensisijainen esitys, mutta ilman aikaa.
% X Haluttu esitys ajankohdasta nykyiselle alueelle, mutta ilman päivämäärää.
%ja Vuosi on desimaali, mutta ei vuosisataa (vaihteluväli 00-99).
%JA Vuosi on desimaali luku mukaan lukien.
%KANSSA Aikavyöhyke.

Käyttämällä gettimeofday -ohjelmaa ohjelman suoritusajan mittaamiseen

#sisältää
#sisältää

inttärkein() {

rakenneaikajakson alku,loppuun;
päivän hetki(&alkaa,TYHJÄ);

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

päivän hetki(&loppuun,TYHJÄ);
printf ('10^5: een kuluva aika on: %ld mikrosekuntia n'',
((loppuun.tv_sec * 1000000 +loppuun.tv_usec) -
(alkaa.tv_sec * 1000000 +alkaa.tv_usec)));

palata 0;
}

Lähtö:

Tämä esimerkki osoittaa, miten päivän aika () -toimintoa voidaan käyttää ohjelman suoritusajan laskemiseen.

Johtopäätös

Tällä tavalla, päivän aika () toimintoa voidaan käyttää Linuxissa. Jos haluat siirtää olemassa olevan koodin, päivän aika () toimintoa voidaan käyttää, mutta uudessa koodissa sitä ei pitäisi käyttää. clock_gettime () toimintoa voidaan käyttää sen sijaan päivän aika () .