Paano magagamit ang pagpapaandar ng gettimeofday sa wikang C?

How Use Gettimeofday Function C Language



Ang gettimeofday () Nakukuha ng pagpapaandar ang oras ng orasan ng system. Ang kasalukuyang oras ay ipinahayag sa lumipas na mga segundo at microseconds mula 00:00:00, Enero 1, 1970 (Unix Epoch). Sa artikulong ito, ipapakita namin sa iyo kung paano gamitin ang gettimeofday () gumana sa Linux. Kaya, magsimula na tayo.

Syntax

intgettimeofday( istrukturaoras ng panahon*lungsod, istrukturatimezone*tz)

Ang gettimeofday () tinukoy ang pagpapaandar sa sys / oras.h file ng header.







Mga Pangangatwiran

Ang pagpapaandar na ito ay tumatagal ng dalawang mga argumento:



Ang 1stpagtatalo ay tumuturo sa oras ng panahon istraktura Ang oras ng panahon istraktura ay ipinahayag bilang sa ibaba sa sys / oras.h header file:



istrukturaoras ng panahon{
time_t tv_sec; // ginamit nang mga segundo
suseconds_t tv_usec; // ginamit para sa microseconds
}

Ang istrakturang istruktura ng timeval ay kumakatawan sa isang oras ng kalendaryo. Mayroon itong dalawang miyembro:





  • tv_sec : Ito ang bilang ng mga segundo mula pa ng panahon.
  • tv_usec : Ito ay karagdagang microseconds pagkatapos ng bilang ng mga segundo pagkalkula mula noong panahon. .

Ang 2ndpagtatalo ay tumuturo sa timezone istraktura Dapat itong normal na itakda sa Null dahil istraktura ng timezone ay lipas na. Ang argument na ito ay para lamang sa pabalik na pagiging tugma.

Mga halagang bumalik

Sa tagumpay, ang gettimeofday () ibalik ang 0, para sa kabiguan ang function ay nagbabalik -1.



Simpleng Kumuha ng Oras at Pag-print

# isama
# isama

intpangunahing() {
istrukturatimeval kasalukuyang_time;
gettimeofday(&oras ngayon,WALA);
printf ('segundo:% ld nmicro segundo:% ld ',
oras ngayon.tv_sec,oras ngayon.tv_usec);

bumalik ka 0;
}

Output:

Dito, sys / oras.h ay isinama para sa gettimeofday () istraktura ng pag-andar at timeval. Ang gettimeofday () Itakda ang pagpapaandar sa oras sa timeval (kasalukuyang_time) na miyembro ng istraktura. Ang tv_sec ay ang integral na bilang ng mga segundo na lumipas mula nang magsimula ang Panahon ng UNIX , sa hatinggabi ng UTC noong Enero 1, 1970 at ang tv_usec ay karagdagang bilang ng mga microsecond na lumipas mula sa tv_sec. Kung patakbuhin mo ang programa dapat mong makita ang output. Sa bawat oras na patakbuhin mo ang programa ang output ay magbabago.

NULL Argument Error

# isama
# isama

intpangunahing() {

istrukturatimeval kasalukuyang_time;
gettimeofday(WALA,WALA);
bumalik ka 0;
}

Output:

Sa halimbawang ito ay ipinapakita na ang unang argumento ng gettimeofday () ang pag-andar ay hindi dapat NUL. Darating ang babalang pagtitipon kung ang unang pagtatalo ay NUL.

Pag-format ng Kasalukuyang Halimbawa ng Oras

# isama
# isama
# isama

intpangunahing() {
istrukturatimeval tv;
time_t t;
istrukturatm*impormasyon;
charbuffer[64];

gettimeofday(&tv,WALA);
t=tvtv_sec;

impormasyon= lokal na Oras (&t);
printf ('% s', pag-akyat (impormasyon));
strftime (buffer, sukat ngbuffer, 'Ngayon ay% A,% B% d. n',impormasyon);
printf ('% s',buffer);
strftime (buffer, sukat ngbuffer, 'Ang oras ay% I:% M% p. n',impormasyon);
printf ('% s',buffer);

bumalik ka 0;
}

Output:

Sa halimbawang ito ay ipinapakita kung paano i-print ang Petsa at Oras sa iba't ibang format. Ito ay hindi isang napakadaling upang kumatawan sa mga petsa mula sa halaga ng pagbabalik ng gettimeofday () pagpapaandar Dito, lokal na Oras() at strftime () ang mga pagpapaandar ay ginagamit upang mailarawan nang maayos ang halaga ng pagbabalik ng gettimeofday () .

Ang lokal na Oras() Ang function ay tumatagal ng isang argument, na kung saan ay isang sanggunian sa isang pointer ng tv_sec larangan ng istruktura ng timeval at nagbabalik ng isang sanggunian sa isang pointer ng a istraktura tm bagay

Ang strftime () ang function ay bubuo ng isang isinapersonal, na-format na string na nagpapakita ng petsa at oras mula sa istraktura tm pointer Ginagamit ang mga format specifier para sa format na display. Halimbawa, ang format string% d-% m-% Y% H:% M:% S ay tumutukoy sa petsa at oras sa form na ito:

04-14-2020 13:09:42

Ang sumusunod ay ang mga mapagpahiwatig ng conversion, maaaring magamit para sa naka-format na pagpapakita:

Tagatukoy Kahulugan
% sa Ang pinaikling pangalan ng araw ng linggo ayon sa kasalukuyang lokal.
% TO Ang pangalan ng araw ng linggo ayon sa kasalukuyang lokal.
% b Pangalan ng pinaikling buwan ayon sa kasalukuyang lokasyon.
% B Pangalan ng buong buwan ayon sa kasalukuyang lokasyon.
% c Ang ginustong representasyon ng petsa at oras para sa kasalukuyang lokal.
% d Bilang isang decimal number para sa buwan ng araw (saklaw 01 - 31).
% H Paggamit ng 24 na oras (saklaw 00 - 23) hanggang sa oras bilang decimal number.
% Ako Paggamit ng 12-oras (saklaw 00 - 23) hanggang sa oras bilang decimal number.
% j Bilang isang decimal number para sa araw ng taon (saklaw 001-366).
% m Bilang isang decimal number para sa buwan (saklaw 01 - 12).
% M Ang decimal number ng minuto.
% p Batay sa tinukoy na halaga ng oras, alinman sa 'am' o 'pm' o ang katumbas na mga string para sa kasalukuyang lokal.
% S Ang decimal number ng pangalawa.
% x Ginustong representasyon ng petsa para sa kasalukuyang lokal, ngunit walang oras.
% X Ginustong representasyon ng oras para sa kasalukuyang lokal, ngunit walang petsa.
% at Ang taon ay decimal ngunit walang siglo (saklaw mula 00 - 99).
% AT Ang taon ay decimal kasama ang siglo.
% MAY Ang time zone.

Paggamit ng gettimeofday upang Sukatin ang Oras ng Pagpapatupad ng Program

# isama
# isama

intpangunahing() {

istrukturasimula ng timeval,magtapos;
gettimeofday(&umpisahan,WALA);

para sa (intako= 0;ako<1e5 ;ako++) {
}

gettimeofday(&magtapos,WALA);
printf ('Ang oras na ginugol upang mabilang sa 10 ^ 5 ay:% ld micro segundo n',
((magtapostv_sec * 1000000 +magtapostv_usec) -
(umpisahantv_sec * 1000000 +umpisahantv_usec)));

bumalik ka 0;
}

Output:

Ipinapakita ng halimbawang ito na paano gettimeofday () Ang function ay maaaring magamit para sa pagkalkula ng oras ng pagpapatupad ng isang programa.

Konklusyon

Sa ganitong paraan, ang gettimeofday () Ang function ay maaaring magamit sa Linux. Para sa pag-port ng mayroon nang code, ang gettimeofday () maaaring magamit ang pagpapaandar ngunit sa bagong code ay hindi ito dapat gamitin. orasan_gettime () maaaring magamit ang pagpapaandar sa halip na gettimeofday () .