C Programování

Jak používat funkci gettimeofday v jazyce C?

Jak používat funkci gettimeofday v jazyce C?
The gettimeofday () funkce získá čas systému. Aktuální čas je vyjádřen v uplynulých sekundách a mikrosekundách od 00:00:00, 1. ledna 1970 (Unix Epoch). V tomto článku vám ukážeme, jak používat gettimeofday () funkce v Linuxu. Pojďme tedy začít.

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 timeval
time_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:

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:42

Níž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 ().

V systému Windows 10 nefunguje levé tlačítko myši
Pokud používáte speciální myš s notebookem nebo stolním počítačem, ale levé tlačítko myši nefunguje ve Windows 10/8/7 z nějakého důvodu uvádíme několi...
Kurzor při psaní v systému Windows 10 skáče nebo se pohybuje náhodně
Pokud zjistíte, že kurzor myši skáče nebo se pohybuje sám, automaticky, náhodně při psaní v notebooku nebo počítači se systémem Windows, pak vám někte...
Jak obrátit směr posouvání myši a touchpadu ve Windows 10
Myš a Touchpadnejenže usnadňují výpočet, ale jsou efektivnější a méně časově náročné. Nemůžeme si představit život bez těchto zařízení, ale přesto je ...