Kaip naudotis „gettimeofday“ funkcija C kalba?

How Use Gettimeofday Function C Language



The gettimeofday () funkcija nustato 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 (Unix Epoch). Šiame straipsnyje mes parodysime, kaip naudotis gettimeofday () funkcija „Linux“. Taigi, pradėkime.

Sintaksė

tarptdienos pradžia( strukturalaiko intervalas*miestas, strukturalaiko zona*tz)

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







Argumentai

Ši funkcija turi du argumentus:



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



strukturalaiko intervalas{
laikas_t tv_sec; // naudojamas sekundėms
suseconds_t tv_usec; // naudojamas mikrosekundėms
}

Struktūros laiko struktūra atspindi kalendorinį laiką. Jį sudaro du nariai:





  • tv_sec : Tai sekundžių skaičius nuo epochos.
  • tv_usec : Tai yra papildomos mikrosekundės po sekundžių skaičiavimo nuo epochos. .

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

Grąžinti vertes

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



Paprastas laikas ir spausdinimas

#įtraukti
#įtraukti

tarptpagrindinis() {
strukturatimeval current_time;
dienos pradžia(&Dabartinis laikas,NULL);
printf ('sekundės: %ld nmikro sekundės: %ld ',
Dabartinis laikas.tv_sec,Dabartinis laikas.tv_usec);

grįžti 0;
}

Išėjimas:

Čia, sys/laikas.h buvo įtraukta už gettimeofday () funkcija ir laiko struktūra. The gettimeofday () funkcija nustatė laiką laiko laiko (dabartinio laiko) struktūros naryje. tv_sec yra neatskiriamas sekundžių skaičius, praėjęs nuo pradžios UNIX epocha , 1970 m. sausio 1 d. vidurnaktį UTC ir tv_usec yra papildomas mikrosekundžių skaičius, praėjęs nuo tv_sec. Jei paleisite programą, turėtumėte pamatyti išvestį. Kiekvieną kartą paleidus programą, išvestis pasikeis.

NULL argumento klaida

#įtraukti
#įtraukti

tarptpagrindinis() {

strukturatimeval current_time;
dienos pradžia(NULL,NULL);
grįžti 0;
}

Išėjimas:

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

Dabartinio laiko formatavimo pavyzdys

#įtraukti
#įtraukti
#įtraukti

tarptpagrindinis() {
strukturalaiko televizija;
laikas_t t;
strukturatm*info;
anglisbuferis[64];

dienos pradžia(&televizorius,NULL);
t=televizorius.tv_sec;

info= vietinis laikas (&t);
printf („%s“, kaip laikas (info));
strftime (buferis, dydisbuferis, „Šiandien yra %A, %B %d. n',info);
printf („%s“,buferis);
strftime (buferis, dydisbuferis, „Laikas yra %I: %M %p. n',info);
printf („%s“,buferis);

grįžti 0;
}

Išėjimas:

Šiame pavyzdyje parodyta, kaip spausdinti datą ir laiką skirtingu formatu. Atsakyti datas nuo grąžinimo vertės nėra labai paprasta gettimeofday () funkcija . Čia, vietinis laikas() ir strftime () funkcijos naudojamos gražiai parodyti grąžinimo vertę gettimeofday () .

The vietinis laikas() funkcija priima argumentą, kuris yra nuoroda į rodyklę tv_sec laukas struktura laiko ir grąžina nuorodą į rodyklę a struk tm objektas.

The strftime () funkcija sukurs suasmenintą, suformatuotą eilutę, rodančią datą ir laiką nuo struk tm rodyklė. Formatuoti rodikliai naudojami formato rodikliams. Pavyzdžiui, formato eilutė%d-%m-%Y%H:%M:%S nurodo datą ir laiką šioje formoje:

2020-04-14 13:09:42

Toliau pateikiami konversijų specifikatoriai, kurie gali būti naudojami formatuotame ekrane:

Specifikatorius Reikšmė
%iki Sutrumpintas savaitės dienos pavadinimas pagal dabartinę lokalę.
%TO 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 Kaip dešimtainis mėnesio skaičius (nuo 01 iki 31).
%H Naudojant 24 valandas (nuo 00 iki 23) iki valandos kaip dešimtainio skaičiaus.
%Aš Naudojant 12 valandų (nuo 00 iki 23) iki valandos kaip dešimtainio skaičiaus.
%j Kaip dešimtainis metų dienos skaičius (diapazonas 001-366).
%m Kaip dešimtainis mėnesio skaičius (nuo 01 iki 12).
%M. Dešimtainis minutės skaičius.
%p Remiantis nurodyta laiko reikšme, „am“ arba „pm“ arba lygiavertės dabartinės lokalės eilutės.
%S Antrasis dešimtainis skaičius.
% x Pageidaujamas dabartinės lokalės datos atvaizdavimas, bet be laiko.
% X Pageidaujamas dabartinės lokalės laiko atvaizdavimas, bet be datos.
%ir Metai yra dešimtainiai, bet nėra šimtmečio (nuo 00 iki 99).
%IR Metai yra dešimtainiai, įskaitant šimtmetį.
%SU Laiko juosta.

Naudojant „gettimeofday“, norint išmatuoti programos vykdymo laiką

#įtraukti
#įtraukti

tarptpagrindinis() {

strukturalaiko pradžia,galas;
dienos pradžia(&pradėti,NULL);

dėl (tarpti= 0;i<1e5 ;i++) {
}

dienos pradžia(&galas,NULL);
printf („Laikas, reikalingas suskaičiuoti iki 10^5: %ld mikrosekundės n',
((galas.tv_sec * 10 000 000 +galas.tv_usec) -
(pradėti.tv_sec * 10 000 000 +pradėti.tv_usec)));

grįžti 0;
}

Išėjimas:

Šis pavyzdys parodo, kaip gettimeofday () Ši funkcija gali būti naudojama skaičiuojant programos vykdymo laiką.

Išvada

Tokiu būdu, gettimeofday () Ši 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 () funkcija gali būti naudojama vietoj gettimeofday () .