Syntax
int gettimeofday (struct timeval * tp, struct timezone * tz)The gettimeofday () funkce je definována v sys / čas.h hlavičkový soubor.
Argumenty
Tato funkce má dva argumenty:
1Svatý argument ukazuje na časové struktura. The časové struktura je deklarována níže v sys / čas.h hlavičkový soubor:
struct timevaltime_t tv_sec; // používá se na sekundy
suseconds_t tv_usec; // používá se pro mikrosekundy
Struktura časové struktury představuje kalendářní čas. Má dva členy:
- tv_sec : Je to počet sekund od epochy.
- tv_usec : Je to další mikrosekundy po výpočtu počtu sekund od epochy…
2nd argument ukazuje na časové pásmo struktura. Normálně by měl být nastaven na NULL, protože strukturované časové pásmo je zastaralý. Tento argument je pouze pro zpětnou kompatibilitu.
Návratové hodnoty
O úspěchu gettimeofday () návrat 0, při selhání funkce vrátí -1.
Jednoduché získání času a tisk
#zahrnout#zahrnout
int main ()
struct timeval current_time;
gettimeofday (& current_time, NULL);
printf ("sekundy:% ld \ nmicro sekundy:% ld",
aktuální čas.tv_sec, aktuální_čas.tv_usec);
návrat 0;
Výstup:
Tady, sys / čas.h byl zahrnut pro gettimeofday () funkce a časová struktura. The gettimeofday () funkce nastaví čas v členu struktury timeval (current_time). tv_sec je integrální počet sekund, které uplynuly od začátku UNIX epocha, o půlnoci UTC 1. ledna 1970 a tv_usec je další počet mikrosekund uplynulý od tv_sec. Pokud spustíte program, měli byste vidět výstup. Pokaždé, když spustíte program, výstup se změní.
Chyba argumentu NULL
#zahrnout#zahrnout
int main ()
struct timeval current_time;
gettimeofday (NULL, NULL);
návrat 0;
Výstup:
V tomto příkladu ukazuje první argument gettimeofday () funkce by neměla být NULL. Varování kompilace přijde, pokud je první argument NULL.
Příklad formátování aktuálního času
#zahrnout#zahrnout
#zahrnout
int main ()
strukturovat časovou televizi;
time_t t;
Stručné informace *;
char buffer [64];
gettimeofday (& tv, NULL);
t = tv.tv_sec;
info = místní čas (& t);
printf ("% s", asctime (informace));
strftime (buffer, sizeof buffer, „Today is% A,% B% d.\ n ", informace);
printf ("% s", vyrovnávací paměť);
strftime (buffer, sizeof buffer, "Čas je% I:% M% p.\ n ", informace);
printf ("% s", vyrovnávací paměť);
návrat 0;
Výstup:
V tomto příkladu ukazuje, jak tisknout datum a čas v jiném formátu. Není snadné reprezentovat data z návratové hodnoty gettimeofday () funkce . Tady, místní čas() a strftime () funkce slouží k pěknému znázornění návratové hodnoty gettimeofday ().
The místní čas() Funkce přebírá argument, který je odkazem na ukazatel tv_sec pole struct timeval a vrátí odkaz na ukazatel a struktura tm objekt.
The strftime () funkce vygeneruje přizpůsobený, naformátovaný řetězec zobrazující datum a čas z struktura tm ukazatel. Pro formátované zobrazení se používají specifikátory formátu. Například formátovací řetězec „% d-% m-% Y% H:% M:% S“ určuje datum a čas v tomto tvaru:
14-04-2020 13:09:42Níže jsou uvedeny specifikátory převodu, které lze použít pro formátované zobrazení:
Specifikátor | Význam |
%A | Zkrácený název dne v týdnu podle aktuálního národního prostředí. |
%A | Název dne v týdnu podle aktuálního národního prostředí. |
% b | Název zkráceného měsíce podle aktuálního národního prostředí. |
% B | Název celého měsíce podle aktuálního národního prostředí. |
%C | Preferované znázornění data a času pro aktuální národní prostředí. |
% d | Jako desetinné číslo pro den měsíce (rozsah 01 - 31). |
% H | Použití 24 hodin (rozsah 00 - 23) na hodinu jako desetinné číslo. |
% I | Použití 12 hodin (rozsah 00 - 23) na hodinu jako desetinné číslo. |
% j | Jako desetinné číslo pro den v roce (rozsah 001-366). |
% m | Jako desetinné číslo za měsíc (rozsah 01 - 12). |
% M | Desetinné číslo minuty. |
% str | Na základě zadané hodnoty času buď „am“ nebo „pm“ nebo ekvivalentní řetězce pro aktuální národní prostředí. |
% S | Desetinné číslo sekundy. |
%X | Preferované znázornění data pro aktuální národní prostředí, ale bez času. |
%X | Preferované znázornění času pro aktuální národní prostředí, ale bez data. |
% y | Rok je desítkový, ale žádné století (rozmezí od 00 do 99). |
% Y | Rok je desetinný včetně století. |
% Z | Časové pásmo. |
Používání gettimeofday k měření času provádění programu
#zahrnout#zahrnout
int main ()
strukturovat timeval začátek, konec;
gettimeofday (& start, NULL);
pro (int i = 0; i <1e5 ; i++)
gettimeofday (& end, NULL);
printf ("Čas potřebný k počítání do 10 ^ 5 je:% ld mikrosekund \ n",
((konec.tv_sec * 1000000 + konec.tv_usec) -
(Start.tv_sec * 10 000 000 + začátek.tv_usec)));
návrat 0;
Výstup:
Tento příklad ukazuje, že jak gettimeofday () funkce může být použita pro výpočet doby provádění programu.
Závěr
Tímto způsobem gettimeofday () funkce může být použita v Linuxu. Pro přenesení stávajícího kódu slouží gettimeofday () funkce může být použita, ale v novém kódu by neměla být použita. clock_gettime () místo gettimeofday ().