Kako uporabljati funkcijo gettimeofday v jeziku C?

How Use Gettimeofday Function C Language



The gettimeofday () funkcija dobi uro ure sistema. Trenutni čas je izražen v pretečenih sekundah in mikrosekundah od 00:00:00, 1. januarja 1970 (Unix Epoch). V tem članku vam bomo pokazali, kako uporabljati gettimeofday () funkcijo v Linuxu. Torej, začnimo.

Sintaksa

intgettimeofday( structtimeval*mesto, structčasovni pas*tz)

The gettimeofday () funkcija je definirana v sys/time.h naslovno datoteko.







Argumenti

Ta funkcija ima dva argumenta:



1stargument kaže na timeval strukturo. The timeval struktura je navedena spodaj v sys/time.h naslovna datoteka:



structtimeval{
time_t tv_sec; // uporabljeno nekaj sekund
suseconds_t tv_usec; // uporabljeno za mikrosekunde
}

Strukturna časovna struktura predstavlja koledarski čas. Ima dva člana:





  • tv_sec : To je število sekund od epohe.
  • tv_usec : To je dodatne mikrosekunde po izračunu števila sekund od epohe. .

2ndargument kaže na časovni pas strukturo. Običajno je treba nastaviti na NULL, ker struktni časovni pas je zastarel. Ta argument je namenjen le povratni združljivosti.

Vrnjene vrednosti

O uspehu, gettimeofday () return 0, v primeru napake funkcija vrne -1.



Preprost čas in tiskanje

#vključi
#vključi

intglavni() {
structtimeval current_time;
gettimeofday(&Trenutni čas,NIČ);
printf ('sekunde: %ld nmikro sekunde: %ld ',
Trenutni čas.tv_sec,Trenutni čas.tv_usec);

vrnitev 0;
}

Izhod:

Tukaj, sys/time.h je vključeno za gettimeofday () funkcijo in časovno strukturo. The gettimeofday () funkcija nastavi čas v članu strukture timeval (current_time). tv_sec je integralno število sekund, ki so pretekle od začetka Doba UNIX , ob polnoči UTC 1. januarja 1970 in tv_usec je dodatno število mikrosekund, ki so pretekle od tv_sec. Če zaženete program, bi morali videti izhod. Vsakič, ko zaženete program, se bo izhod spremenil.

Napaka argumenta NULL

#vključi
#vključi

intglavni() {

structtimeval current_time;
gettimeofday(NIČ,NIČ);
vrnitev 0;
}

Izhod:

V tem primeru je prikazan prvi argument gettimeofday () funkcija ne sme biti NULL. Če je prvi argument NULL, se prikaže opozorilo pri sestavljanju.

Primer oblikovanja trenutnega časa

#vključi
#vključi
#vključi

intglavni() {
structTimeval TV;
time_t t;
structtm*info;
charpufra[64];

gettimeofday(&tv,NIČ);
t=tv.tv_sec;

info= lokalni čas (&t);
printf ('%s', asctime (info));
strftime (pufra, velikostofpufra, 'Danes je %A, %B %d. n',info);
printf ('%s',pufra);
strftime (pufra, velikostofpufra, „Čas je %I: %M %p. n',info);
printf ('%s',pufra);

vrnitev 0;
}

Izhod:

V tem primeru je prikazano, kako natisniti datum in čas v drugačni obliki. Predstavljati datume iz vrnjene vrednosti ni zelo enostavno gettimeofday () funkcijo. Tukaj, lokalni čas() in strftime () funkcije se uporabljajo za lepo predstavitev vrnjene vrednosti gettimeofday () .

The lokalni čas() funkcija sprejme argument, ki je sklic na kazalec na tv_sec polje struct timeval in vrne sklic na kazalec na struct tm predmet.

The strftime () funkcija bo ustvarila prilagojen, oblikovan niz, ki prikazuje datum in čas iz struct tm kazalec. Specifikatorji oblike se uporabljajo za oblikovan prikaz. Na primer niz za obliko%d-%m-%Y%H:%M:%S podaja datum in čas v tej obliki:

14.04.2020 13:09:42

Za oblikovani prikaz se lahko uporabijo specifikatorji pretvorbe:

Specifikator Pomen
%do Skrajšano ime dneva v tednu glede na trenutno lokacijo.
%TO Ime dneva v tednu glede na trenutno lokacijo.
% b Ime skrajšanega meseca glede na trenutno lokacijo.
% B Ime celotnega meseca glede na trenutno lokacijo.
% c Prednostna predstavitev datuma in časa za trenutno področno nastavitev.
%d Kot decimalno število za dan meseca (razpon 01 - 31).
%H Uporabite 24 ur (razpon 00-23) do ure kot decimalno število.
%JAZ Uporabite 12 ur (razpon 00-23) do ure kot decimalno število.
%j Kot decimalno število za dan v letu (obseg 001-366).
%m Kot decimalno število za mesec (razpon 01 - 12).
%M Decimalno število minute.
%str Na podlagi podane časovne vrednosti bodisi 'am' ali 'pm' ali enakovrednih nizov za trenutno področno nastavitev.
%S Decimalno število drugega.
% x Prednostna predstavitev datuma za trenutno področno nastavitev, vendar brez časa.
% X Prednostna predstavitev časa za trenutno področno nastavitev, vendar brez datuma.
%in Leto je decimalno, vendar brez stoletja (razpon od 00 do 99).
%AND Leto je decimalno, vključno s stoletjem.
%Z Časovni pas.

Uporaba gettimeofday za merjenje časa izvajanja programa

#vključi
#vključi

intglavni() {

structčasovni začetek,konec;
gettimeofday(&začetek,NIČ);

za (intjaz= 0;jaz<1e5 ;jaz++) {
}

gettimeofday(&konec,NIČ);
printf ('Čas za štetje do 10^5 je: %ld mikro sekund n',
((konec.tv_sec * 1000000 +konec.tv_usec) -
(začetek.tv_sec * 1000000 +začetek.tv_usec)));

vrnitev 0;
}

Izhod:

Ta primer kaže, kako gettimeofday () funkcijo lahko uporabite za izračun časa izvajanja programa.

Zaključek

Na ta način je gettimeofday () funkcijo lahko uporabljate v Linuxu. Za prenos obstoječe kode je gettimeofday () Funkcija se lahko uporablja, vendar se v novi kodi ne sme uporabljati. clock_gettime () funkcijo lahko uporabite namesto gettimeofday () .