Ako používať funkciu gettimeofday v jazyku C?

How Use Gettimeofday Function C Language



The gettimeofday () funkcia získa hodiny systému. Aktuálny čas je vyjadrený v uplynulých sekundách a mikrosekundách od 00:00:00, 1. januára 1970 (Unix Epoch). V tomto článku vám ukážeme, ako používať gettimeofday () funkcia v Linuxe. Začnime teda.

Syntax

intgettimeofday( Structčasový*mesto, Structčasové pásmo*tz)

The gettimeofday () funkcia je definovaná v sys/čas.h hlavičkový súbor.







Argumenty

Táto funkcia má dva argumenty:



1svargument ukazuje na časový štruktúra. The časový štruktúra je deklarovaná nižšie v sys/čas.h hlavičkový súbor:



Structčasový{
time_t tv_sec; // používa sa niekoľko sekúnd
suseconds_t tv_usec; // používa sa na mikrosekundy
}

Štruktúra časovej štruktúry predstavuje kalendárny čas. Má dvoch členov:





  • tv_sec : Je to počet sekúnd od epochy.
  • tv_usec : Sú to ďalšie mikrosekundy po výpočte počtu sekúnd od epochy. .

2ndargument ukazuje na časové pásmo štruktúra. Normálne by mal byť nastavený na NULL, pretože štruktúrované časové pásmo je zastaraný. Tento argument je len pre spätnú kompatibilitu.

Návratové hodnoty

Pokiaľ ide o úspech, gettimeofday () vrátiť 0, v prípade zlyhania funkcia vráti -1.



Jednoduché získanie času a tlač

#zahrnúť
#zahrnúť

intHlavná() {
Structtimeval current_time;
gettimeofday(&aktuálny čas,NULOVÝ);
printf ('sekúnd: %ld nmikrosekundy: %ld ',
aktuálny čas.tv_sec,aktuálny čas.tv_usec);

vrátiť sa 0;
}

Výkon:

Tu, sys/čas.h bol zahrnutý pre gettimeofday () funkcia a časová štruktúra. The gettimeofday () funkcia nastavuje čas v člene štruktúry timeval (current_time). tv_sec je integrálny počet sekúnd, ktoré uplynuli od začiatku súboru UNIXová epocha , o polnoci UTC 1. januára 1970 a tv_usec je ďalší počet mikrosekúnd, ktoré uplynuli od tv_sec. Ak spustíte program, mali by ste vidieť výstup. Pri každom spustení programu sa výstup zmení.

Chyba argumentu NULL

#zahrnúť
#zahrnúť

intHlavná() {

Structtimeval current_time;
gettimeofday(NULOVÝ,NULOVÝ);
vrátiť sa 0;
}

Výkon:

V tomto prípade ukazuje prvý argument súboru gettimeofday () funkcia by nemala byť NULL. Upozornenie na kompiláciu príde, ak je prvý argument NULL.

Formátovanie príkladu aktuálneho času

#zahrnúť
#zahrnúť
#zahrnúť

intHlavná() {
Structtimeval tv;
time_t t;
Structtm*Info;
charnárazník[64];

gettimeofday(&televízia,NULOVÝ);
t=televíziatv_sec;

Info= miestny čas (&t);
printf ('%s', asctime (Info));
strftime (nárazník, veľkosťnárazník, „Dnes je %A, %B %d. n',Info);
printf ('%s',nárazník);
strftime (nárazník, veľkosťnárazník, „Čas je %I: %M %p. n',Info);
printf ('%s',nárazník);

vrátiť sa 0;
}

Výkon:

V tomto prípade ukazuje, ako vytlačiť dátum a čas v inom formáte. Reprezentácia dátumov z návratovej hodnoty hodnoty nie je veľmi jednoduché gettimeofday () funkciu. Tu, miestny čas() a strftime () funkcie sa používajú na pekné zobrazenie návratovej hodnoty gettimeofday () .

The miestny čas() funkcia preberá argument, ktorý je odkazom na ukazovateľ súboru tv_sec oblasti štruktúrne časové obdobie a vráti odkaz na ukazovateľ a struct tm predmet.

The strftime () funkcia vygeneruje prispôsobený, formátovaný reťazec zobrazujúci dátum a čas z struct tm ukazovateľ. Na formátované zobrazenie sa používajú špecifikátory formátu. Napríklad formátovací reťazec%d-%m-%Y%H:%M:%S určuje dátum a čas v tomto formáte:

14. 04. 2020 13:09:42

Nasledujú špecifikátory konverzie, ktoré možno použiť na formátované zobrazenie:

Špecifikátor Význam
%do Skrátený názov dňa v týždni podľa súčasného národného nastavenia.
%TO Názov dňa v týždni podľa súčasného národného nastavenia.
% b Názov skráteného mesiaca podľa súčasného národného nastavenia.
% B Názov celého mesiaca podľa súčasného miestneho nastavenia.
% c Preferované zobrazenie dátumu a času pre súčasné miestne nastavenie.
%d Ako desatinné číslo pre deň v mesiaci (rozsah 01 - 31).
%H Použitie 24-hodinového (rozsah 00-23) až hodiny ako desatinného čísla.
%I Použité 12-hodinové (rozsah 00-23) až hodiny ako desatinné číslo.
%j Ako desatinné číslo pre deň v roku (rozsah 001-366).
%m Ako desatinné číslo za mesiac (rozsah 01 - 12).
%M Desatinné číslo minúty.
%p Na základe zadanej hodnoty času buď „am“ alebo „pm“ alebo ekvivalentných reťazcov pre aktuálne miestne nastavenie.
%S Desatinné číslo druhého.
% X Preferované zobrazenie dátumu pre aktuálne miestne nastavenie, ale bez času.
% X Preferované zobrazenie času pre aktuálne národné prostredie, ale bez dátumu.
%a Rok je desatinný, ale nie storočný (v rozmedzí od 00 - 99).
%AND Rok je desatinný vrátane storočia.
%S Časové pásmo.

Použitie gettimeofday na meranie času spustenia programu

#zahrnúť
#zahrnúť

intHlavná() {

Structčasový štart,koniec;
gettimeofday(&začať,NULOVÝ);

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

gettimeofday(&koniec,NULOVÝ);
printf („Čas potrebný na odpočítanie do 10^5 je: %ld mikro sekúnd n',
((koniec.tv_sec * 10 000 000 +koniec.tv_usec) -
(začať.tv_sec * 10 000 000 +začať.tv_usec)));

vrátiť sa 0;
}

Výkon:

Tento príklad ukazuje, že ako gettimeofday () Túto funkciu je možné použiť na výpočet času spustenia programu.

Záver

Týmto spôsobom sa gettimeofday () Túto funkciu je možné použiť v systéme Linux. Na prenos existujúceho kódu slúži prípona gettimeofday () funkcia môže byť použitá, ale v novom kóde by nemala byť použitá. clock_gettime () namiesto gettimeofday () .