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:42Ang 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 () .