Kako koristiti funkciju gettimeofday na jeziku C?

How Use Gettimeofday Function C Language



The gettimeofday () funkcija dobiva vrijeme sata sustava. Trenutno vrijeme izraženo je u proteklim sekundama i mikrosekundama od 00:00:00, 1. siječnja 1970. (Unix epoha). U ovom ćemo vam članku pokazati kako se koristi gettimeofday () funkciju u Linuxu. Dakle, krenimo.

Sintaksa

intgettimeofday( structvremenski*Grad, structVremenska zona*tz)

The gettimeofday () funkcija definirana je u sys/vrijeme.h datoteku zaglavlja.







Argumenti

Ova funkcija ima dva argumenta:



1svargument ukazuje na vremenski struktura. The vremenski struktura je deklarirana kao dolje u sys/vrijeme.h datoteka zaglavlja:



structvremenski{
time_t tv_sec; // koristi se nekoliko sekundi
suseconds_t tv_usec; // koristi se za mikrosekunde
}

Strukturna vremenska struktura predstavlja kalendarsko vrijeme. Ima dva člana:





  • tv_sec : To je broj sekundi od epohe.
  • tv_usec : To je dodatnih mikrosekundi nakon izračuna broja sekundi od epohe. .

2ndargument ukazuje na Vremenska zona struktura. Normalno bi ga trebalo postaviti na NULL jer strukturna vremenska zona je zastario. Ovaj argument služi samo za kompatibilnost unatrag.

Povratne vrijednosti

O uspjehu, gettimeofday () return 0, za neuspjeh funkcija vraća -1.



Jednostavno Get Time and Print

#uključi
#uključi

intglavni() {
structtimeval current_time;
gettimeofday(&Trenutno vrijeme,NULL);
printf ('sekundi: %ld nmikro sekundi: %ld ',
Trenutno vrijeme.tv_sec,Trenutno vrijeme.tv_usec);

povratak 0;
}

Izlaz:

Ovdje, sys/vrijeme.h uključeno je za gettimeofday () funkcija i vremenska struktura. The gettimeofday () funkcija postavlja vrijeme u timeval (current_time) članu strukture. tv_sec je integralni broj sekundi proteklih od početka UNIX epoha , u ponoć UTC 1. siječnja 1970. i tv_usec je dodatni broj mikrosekundi protekao od tv_sec. Ako pokrenete program, trebali biste vidjeti izlaz. Svaki put kada pokrenete program, izlaz će se promijeniti.

NULL Greška u argumentu

#uključi
#uključi

intglavni() {

structtimeval current_time;
gettimeofday(NULL,NULL);
povratak 0;
}

Izlaz:

U ovom primjeru prikazan je prvi argument gettimeofday () funkcija ne smije biti NULL. Upozorenje o kompilaciji doći će ako je prvi argument NULL.

Primjer oblikovanja trenutnog vremena

#uključi
#uključi
#uključi

intglavni() {
structtimeval tv;
vrijeme_t t;
structtm*info;
charpufer[64];

gettimeofday(&televizor,NULL);
t=televizor.tv_sec;

info= lokalno vrijeme (&t);
printf ('%s', asctime (info));
strftime (pufer, veličinapufer, 'Danas je %A, %B %d. n',info);
printf ('%s',pufer);
strftime (pufer, veličinapufer, 'Vrijeme je %I: %M %p. n',info);
printf ('%s',pufer);

povratak 0;
}

Izlaz:

U ovom primjeru prikazano je kako ispisati datum i vrijeme u drugom formatu. Nije lako predstaviti datume od povratne vrijednosti gettimeofday () funkciju. Ovdje, lokalno vrijeme() i strftime () funkcije koriste se za lijepo predstavljanje vraćene vrijednosti gettimeofday () .

The lokalno vrijeme() funkcija uzima argument, koji je referenca na pokazivač na tv_sec polje od struct timeval i vraća referencu na pokazivač a struct tm objekt.

The strftime () funkcija generirat će prilagođeni, formatirani niz koji prikazuje datum i vrijeme od struct tm pokazivač. Specifikatori formata koriste se za formatirani prikaz. Na primjer, format niza%d-%m-%Y%H:%M:%S navodi datum i vrijeme u ovom obliku:

14.04.2020 13:09:42

Slijede specifikatori pretvorbe koji se mogu koristiti za formatirani prikaz:

Specifikator Značenje
%do Skraćeni naziv radnog dana prema sadašnjem jeziku.
%DO Naziv radnog dana prema trenutnom jeziku.
% b Naziv skraćenog mjeseca prema trenutnom jeziku.
% B Naziv cijelog mjeseca prema sadašnjem jeziku.
% c Poželjni prikaz datuma i vremena za trenutno područje.
%d Kao decimalni broj za dan u mjesecu (raspon 01 - 31).
%H Korištenje 24 sata (raspon 00-23) do sata kao decimalnog broja.
%I Koristeći 12 sati (raspon 00-23) do sata kao decimalni broj.
%j Kao decimalni broj za dan u godini (raspon 001-366).
%m Kao decimalni broj za mjesec (raspon 01 - 12).
%M Decimalni broj minute.
%str Na temelju navedene vrijednosti vremena, ili 'am' ili 'pm' ili ekvivalentni nizovi za trenutnu lokalizaciju.
%S Decimalni broj druge.
% x Poželjni prikaz datuma za trenutnu lokalizaciju, ali bez vremena.
% X Poželjni prikaz vremena za trenutnu lokalizaciju, ali bez datuma.
%i Godina je decimalna, ali nema stoljeća (raspon od 00 - 99).
%I Godina je decimalna uključujući i stoljeće.
%S Vremenska zona.

Korištenje gettimeofday za mjerenje vremena izvođenja programa

#uključi
#uključi

intglavni() {

structvremenski početak,kraj;
gettimeofday(&početak,NULL);

za (inti= 0;i<1e5 ;i++) {
}

gettimeofday(&kraj,NULL);
printf ('Vrijeme potrebno za brojanje do 10^5 je: %ld mikro sekundi n',
((kraj.tv_sec * 1000000 +kraj.tv_usec) -
(početak.tv_sec * 1000000 +početak.tv_usec)));

povratak 0;
}

Izlaz:

Ovaj primjer pokazuje kako gettimeofday () funkcija se može koristiti za izračunavanje vremena izvođenja programa.

Zaključak

Na ovaj način, gettimeofday () funkcija se može koristiti u Linuxu. Za prijenos postojećeg koda, gettimeofday () funkcija se može koristiti, ali se u novom kodu ne smije koristiti. clock_gettime () funkcija se može koristiti umjesto gettimeofday () .