C Programovanie

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

Ako používať funkciu gettimeofday v jazyku C?
The gettimeofday () Táto funkcia získa čas 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. Takže poďme na to.

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

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

Nasledujú š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 ().

Hry 5 najlepších arkádových hier pre Linux
5 najlepších arkádových hier pre Linux
V dnešnej dobe sú počítače vážne stroje používané na hranie hier. Ak nemôžete dosiahnuť nové najvyššie skóre, budete vedieť, čo tým myslím. V tomto pr...
Hry Battle For Wesnoth 1.13.6 Vývoj uvoľnený
Battle For Wesnoth 1.13.6 Vývoj uvoľnený
Battle For Wesnoth 1.13.6 vydané minulý mesiac, je šiestym vývojovým vydaním v 1.13.séria x a prináša množstvo vylepšení, najmä používateľského rozhra...
Hry Ako nainštalovať League Of Legends na Ubuntu 14.04
Ako nainštalovať League Of Legends na Ubuntu 14.04
Ak ste fanúšikom League of Legends, potom je to pre vás príležitosť otestovať spustenie League of Legends. Upozorňujeme, že program PlayOnLinux podpor...