Syntax
int gettimeofday (struct timeval * tp, struct timezone * tz)The gettimeofday () funkcia je definovaná v sys / čas.h hlavičkový súbor.
Argumenty
Táto funkcia má dva argumenty:
1sv argument poukazuje na časové pásmo štruktúra. The časové pásmo štruktúra je deklarovaná ako nižšie v sys / čas.h hlavičkový súbor:
struct timevaltime_t tv_sec; // používa sa na sekundy
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 : Je to ďalších mikrosekúnd po výpočte počtu sekúnd od epochy ..
2nd argument poukazuje na časové pásmo štruktúra. Za normálnych okolností by mala byť nastavená na hodnotu NULL, pretože štruktúrované časové pásmo je zastaralá. Tento argument slúži iba na spätnú kompatibilitu.
Vrátiť hodnoty
O úspechu gettimeofday () návrat 0, pre zlyhanie funkcia vráti -1.
Jednoduché získanie času a tlač
#include#include
int main ()
struct timeval current_time;
gettimeofday (& current_time, NULL);
printf ("sekundy:% ld \ nmicro sekundy:% ld",
aktuálny čas.tv_sec, current_time.tv_usec);
návrat 0;
Výkon:
Tu, sys / čas.h bol zahrnutý pre gettimeofday () funkcie a časovej štruktúry. The gettimeofday () funkcia nastavila čas v člene časovej štruktúry (current_time). tv_sec je integrálny počet sekúnd, ktorý uplynul od začiatku UNIX epocha, o polnoci UTC 1. januára 1970 a tv_usec je ďalší počet mikrosekúnd, ktorý uplynul od tv_sec. Ak spustíte program, mali by ste vidieť výstup. Zakaždým, keď spustíte program, výstup sa zmení.
Chyba argumentu NULL
#include#include
int main ()
struct timeval current_time;
gettimeofday (NULL, NULL);
návrat 0;
Výkon:
V tomto príklade je uvedený prvý argument gettimeofday () funkcia by nemala mať hodnotu NULL. Varovanie o kompilácii príde, ak má prvý argument hodnotu NULL.
Príklad formátovania aktuálneho času
#include#include
#include
int main ()
struct timeval tv;
time_t t;
struct tm * info;
zuhoľnatý nárazník [64];
gettimeofday (& tv, NULL);
t = tv.tv_sec;
info = miestny čas (& t);
printf ("% s", asctime (info));
strftime (buffer, sizeof buffer, „Today is% A,% B% d.\ n ", informácie);
printf ("% s", vyrovnávacia pamäť);
strftime (buffer, sizeof buffer, "Čas je% I:% M% p.\ n ", informácie);
printf ("% s", vyrovnávacia pamäť);
návrat 0;
Výkon:
V tomto príklade je uvedené, ako tlačiť dátum a čas v inom formáte. Nie je veľmi ľahké reprezentovať dátumy od návratovej hodnoty gettimeofday () funkcia . Tu, miestny čas() a strftime () funkcie slúžia na pekné vyjadrenie návratovej hodnoty gettimeofday ().
The miestny čas() funkcia vezme argument, ktorý je odkazom na ukazovateľ tv_sec oblasť struct timeval a vráti odkaz na ukazovateľ a struct tm objekt.
The strftime () funkcia vygeneruje prispôsobený, naformá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 tvare:
14-04-2020 13:09:42Nasledujú špecifikátory prevodu, ktoré možno použiť na formátované zobrazenie:
Špecifikátor | Význam |
% a | Skrátený názov dňa v týždni podľa aktuálneho miestneho nastavenia. |
% A | Názov dňa v týždni podľa aktuálneho miestneho nastavenia. |
% b | Názov skráteného mesiaca podľa súčasného miestneho nastavenia. |
% B | Názov celého mesiaca podľa súčasného miestneho nastavenia. |
% c | Preferované znázornenie dátumu a času pre súčasné miestne nastavenie. |
% d | Ako desatinné číslo pre deň v mesiaci (rozsah 01 - 31). |
% H | Použitie 24 hodín (rozsah 00 - 23) na hodinu ako desatinné číslo. |
% I | Použitie 12 hodín (rozsah 00 - 23) na hodinu 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. |
% str | Na základe zadanej hodnoty času je to „am“ alebo „pm“ alebo ekvivalentné reťazce pre aktuálne miestne nastavenie. |
% S | Desatinné číslo druhého. |
%X | Preferované znázornenie dátumu pre aktuálne miestne nastavenie, ale bez času. |
%X | Preferované zobrazenie času pre aktuálne miestne nastavenie, ale bez dátumu. |
% r | Rok je desatinný, ale nie storočný (v rozmedzí od 00 - 99). |
% Y | Rok je desatinný vrátane storočia. |
% Z | Časové pásmo. |
Používanie gettimeofday na meranie času vykonania programu
#include#include
int main ()
Štruktúra timeval začiatok, koniec;
gettimeofday (& start, NULL);
pre (int i = 0; i <1e5 ; i++)
gettimeofday (& end, NULL);
printf ("Čas potrebný na spočítanie do 10 ^ 5 je:% ld mikrosekúnd \ n",
((koniec.tv_sec * 10 000 000 + koniec.tv_usec) -
(štart.tv_sec * 10 000 000 + štart.tv_usec)));
návrat 0;
Výkon:
Tento príklad ukazuje, že ako gettimeofday () možno použiť na výpočet času vykonania programu.
Záver
Týmto spôsobom gettimeofday () môže byť použitá v Linuxe. Na prenos existujúceho kódu slúži gettimeofday () môže byť použitá, ale v novom kóde by sa nemala používať. clock_gettime () namiesto gettimeofday ().