C programavimas

Kaip naudoti gettimeofday funkciją C kalba?

Kaip naudoti gettimeofday funkciją C kalba?
The gettimeofday () funkcija gauna sistemos laikrodžio laiką. Dabartinis laikas išreiškiamas praėjusiomis sekundėmis ir mikrosekundėmis nuo 1970 m. Sausio 1 d., 00:00:00, 1970 m. („Unix“ epocha). Šiame straipsnyje mes parodysime, kaip naudoti gettimeofday () funkcija „Linux“. Taigi, pradėkime.

Sintaksė

int gettimeofday (struktūros laikas * tp, struktūros laiko juosta * tz)

The gettimeofday () funkcija apibrėžta sys / laikas.h antraštės failas.

Argumentai

Ši funkcija apima du argumentus:

1šv argumentas nurodo laiko struktūra. The laiko struktūra deklaruojama taip, kaip nurodyta toliau sys / laikas.h antraštės failas:

struktūros laikas
time_t tv_sec; // naudojamas sekundes
suseconds_t tv_usec; // naudojamas mikrosekundėms

Struktūrinė laiko struktūra rodo kalendoriaus laiką. Ją sudaro du nariai:

2nd argumentas nurodo laiko zona struktūra. Paprastai jis turėtų būti NULL, nes struktūros laiko juosta yra pasenęs. Šis argumentas skirtas tik atgaliniam suderinamumui.

Grąžinimo vertės

Dėl sėkmės gettimeofday () grąžinti 0, nesėkmės atveju funkcija grąžina -1.

Paprasta gauti laiko ir spausdinti

# įtraukti
# įtraukti
int main ()
struct timeval current_time;
gettimeofday (& current_time, NULL);
printf ("sekundės:% ld \ nm mikrosekundės:% ld",
Dabartinis laikas.tv_sec, current_time.tv_usec);
grąžinti 0;

Išvestis:

Čia, sys / laikas.h buvo įtrauktas į gettimeofday () funkcija ir laiko struktūra. The gettimeofday () funkcija nustato laiko laiko (dabartinis_ laikas) struktūros narį. tv_sec yra vientisas sekundžių, praėjusių nuo programos pradžios, skaičius UNIX epocha, vidurnaktį UTC, 1970 m. sausio 1 d., ir „tv_usec“ yra papildomas mikrosekundžių, praėjusių nuo „tv_sec“, skaičius. Jei paleisite programą, turėtumėte pamatyti išvestį. Kiekvieną kartą paleidus programą produkcija pasikeis.

NULL argumento klaida

# įtraukti
# įtraukti
int main ()
 
struct timeval current_time;
gettimeofday (NULL, NULL);
grąžinti 0;

Išvestis:

Šiame pavyzdyje parodytas pirmasis argumentas gettimeofday () funkcija neturėtų būti NULL. Kompiuterio įspėjimas bus pateiktas, jei pirmasis argumentas bus NULL.

Dabartinio laiko formatavimo pavyzdys

# įtraukti
# įtraukti
# įtraukti
int main ()
struct laikinoji televizija;
laikas_t t;
struct tm * info;
char buferis [64];
 
gettimeofday (& tv, NULL);
t = tv.tv_sec;
info = vietos laikas (& t);
printf ("% s", veiksmo laikas (informacija));
strftime (buffer, sizeof buffer, "Šiandien yra% A,% B% d.\ n ", informacija);
printf ("% s", buferis);
strftime (buffer, sizeof buffer, "Laikas yra% I:% M% p.\ n ", informacija);
printf ("% s", buferis);
grąžinti 0;

Išvestis:

Šiame pavyzdyje parodyta, kaip spausdinti datą ir laiką skirtingu formatu. Tai nėra labai lengva atvaizduoti datas iš grąžinamosios vertės gettimeofday () funkcija . Čia, vietinis laikas() ir strftime () funkcijos naudojamos gražiai parodyti gettimeofday ().

The vietinis laikas() funkcija užima argumentą, kuris yra nuoroda į žymeklį tv_sec sritis struktūros laikas ir grąžina nuorodą į a žymeklį struct tm objektas.

The strftime () funkcija sugeneruos suasmenintą, suformatuotą eilutę, rodančią datą ir laiką nuo struct tm rodyklė. Suformatuotam vaizdui naudojami formato specifikatoriai. Pvz., Formato eilutė „% d-% m-% Y% H:% M:% S“ nurodo datą ir laiką tokia forma:

2020-04-14 13:09:42

Toliau pateikiami konversijų specifikatoriai, kurie gali būti naudojami suformatuotam vaizdui rodyti:

Specifikatorius Reikšmė
% a Sutrumpintas savaitės dienos pavadinimas pagal dabartinę lokalę.
% A Savaitės dienos pavadinimas pagal dabartinę lokalę.
% b Sutrumpinto mėnesio pavadinimas pagal dabartinę lokalę.
% B Viso mėnesio pavadinimas pagal dabartinę lokalę.
% c Pageidaujamas dabartinės lokalės datos ir laiko atvaizdavimas.
% d Dešimtainis skaičius per mėnesio dieną (diapazonas nuo 01 iki 31).
% H Dešimtainiu skaičiumi 24 val. (Intervalas nuo 00 iki 23) iki valandos.
% I Dešimtainiu skaičiumi naudokite 12 valandų (intervalas nuo 00 iki 23) iki valandos.
% j Dešimtainis skaičius dienos dieną (diapazonas 001–366).
% m Dešimtainis mėnesio skaičius (diapazonas nuo 01 iki 12).
% M Dešimtainis minutės skaičius.
% p Pagal nurodytą laiko vertę „am“ arba „pm“ arba lygiavertės einamosios lokalės eilutės.
% S Dešimtainis sekundės skaičius.
% x Pageidaujamas dabartinės lokalės datos atvaizdavimas, bet be laiko.
% X Pageidaujamas dabartinės lokalės laiko atvaizdavimas, bet be datos.
% y Metai yra dešimtainiai, bet nėra šimtmečio (svyruoja nuo 00 iki 99).
% Y Metai yra dešimtainiai, įskaitant šimtmetį.
% Z Laiko juosta.

„Gettimeofday“ naudojimas norint įvertinti programos vykdymo laiką

# įtraukti
# įtraukti
 
int main ()
 
struktūros laiko pradžia, pabaiga;
gettimeofday (& start, NULL);
 
už (int i = 0; i <1e5 ; i++)

 
gettimeofday (& end, NULL);
printf ("Laikas, kurį reikia skaičiuoti iki 10 ^ 5, yra:% ld mikro sekundės \ n",
((galas.tv_sec * 1000000 + pabaiga.tv_usec) -
(pradžia.tv_sec * 1000000 + pradžia.tv_usec)));
grąžinti 0;

Išvestis:

Šis pavyzdys rodo, kaip gettimeofday () funkcija gali būti naudojama programos vykdymo trukmei apskaičiuoti.

Išvada

Tokiu būdu gettimeofday () funkcija gali būti naudojama „Linux“. Norėdami perkelti esamą kodą, gettimeofday () Funkcija gali būti naudojama, tačiau naujame kode ji neturėtų būti naudojama. clock_gettime ()  Vietoj gettimeofday ().

„Battle for Wesnoth“ pamoka
„Battle for Wesnoth“ yra vienas populiariausių atvirojo kodo strateginių žaidimų, kurį šiuo metu galite žaisti. Šis žaidimas ne tik buvo kuriamas laba...
0 A.D. Pamoka
Iš daugybės strateginių žaidimų 0 A.D. sugeba išsiskirti kaip išsamus pavadinimas ir labai gilus, taktinis žaidimas, nepaisant to, kad yra atviro kodo...
„Unity3D“ pamoka
Įvadas į „Unity 3D“ „Unity 3D“ yra galingas žaidimų kūrimo variklis. Tai yra daugiašalė platforma, kuri leidžia kurti žaidimus mobiliesiems, interneti...