Jak używać funkcji gettimeofday w języku c?

Jak używać funkcji gettimeofday w języku c?
getTimeofday () Funkcja daje czas zegara systemu. Obecny czas wyraża się w upływających sekundach i mikrosekundach od 00:00:00, 1 stycznia 1970 r. (Unix Epoch). W tym artykule pokażemy, jak korzystać z getTimeofday () funkcja w Linux. Więc zacznijmy.

Składnia

int gettimeofday (struct timval *tp, struktura strefa czasowa *tz)

getTimeofday () funkcja jest zdefiniowana w Sys/czas.H plik nagłówka.

Argumenty

Ta funkcja przyjmuje dwa argumenty:

1St Argument wskazuje na Timeval Struktura. Timeval Struktura jest zadeklarowana jak poniżej w Sys/czas.H plik nagłówka:

struct timval
time_t tv_sec; // używane przez sekundy
suseconds_t tv_usec; // używane do mikrosekund

Struktura struktury czasowej reprezentuje czas kalendarza. Ma dwóch członków:

  • TV_SEC : To liczba sekund od epoki.
  • TV_USEC : To dodatkowe mikrosekundy po liczbie sekund obliczeń od epoki…

2Nd Argument wskazuje na strefa czasowa Struktura. Zwykle powinien być ustawiony na null, ponieważ Strefa czasowa struktura jest przestarzały. Ten argument dotyczy wyłącznie kompatybilności wstecznej.

Wartości zwracane

O sukcesie, getTimeofday () zwrócić 0, dla awarii funkcja zwraca -1.

Prosty czas i wydruku

#włączać
#włączać
int main ()
struct timVal current_time;
getTimeofDay (& current_time, null);
printf („sekundy: %ld \ nmicro sekundy: %ld”,
Obecny czas.TV_SEC, Current_Time.tv_usec);
powrót 0;

Wyjście:

Tutaj, Sys/czas.H został uwzględniony dla getTimeofday () Funkcja i struktura czasowa. getTimeofday () Funkcja Ustaw czas w Struktura Timeval (Current_Time). TV_SEC to integralna liczba sekund upłynęła od początku UNIX EPOCH, Na północy UTC 1 stycznia 1970 r. I TV_USEC to dodatkowa liczba mikrosekund, które wychodziły z TV_SEC. Jeśli uruchomisz program, powinieneś zobaczyć dane wyjściowe. Za każdym razem, gdy uruchamiasz program, wyjście się zmieni.

Błąd argumentu zerowego

#włączać
#włączać
int main ()
struct timVal current_time;
GetTimeofday (NULL, NULL);
powrót 0;

Wyjście:

W tym przykładzie pokazuje, że pierwszy argument getTimeofday () Funkcja nie powinna być zerowa. Ostrzeżenie o kompilacji nastąpi, jeśli pierwszy argument jest zerowy.

Przykład formatowania bieżącego czasu

#włączać
#włączać
#włączać
int main ()
struktur timval tv;
czas_t t;
struct tm *info;
Char Buffer [64];
GetTimeofDay (i telewizja, NULL);
T = TV.TV_SEC;
info = LocalTime (& t);
printf („%s”, asctime (info));
Strftime (bufor, rozmiar buforu: „Dzisiaj jest %a, %b %d.\ n ", info);
printf („%s”, bufor);
Strftime (bufor, bufor sizeof, „Czas to %I: %m %p.\ n ", info);
printf („%s”, bufor);
powrót 0;

Wyjście:

W tym przykładzie pokazuje, jak wydrukować datę i godzinę w innym formacie. Nie jest to bardzo łatwe do przedstawienia dat z wartości zwrotu getTimeofday () funkcjonować . Tutaj, czas lokalny() I Strftime () funkcje są używane do ładnego reprezentowania wartości zwracania getTimeofday ().

czas lokalny() funkcja przyjmuje argument, który jest odniesieniem do wskaźnika TV_SEC pole struktur timalval i zwraca odniesienie do wskaźnika struct tm obiekt.

Strftime () Funkcja wygeneruje spersonalizowany, sformatowany ciąg pokazujący datę i godzinę z struct tm wskaźnik. Do sformatowanego wyświetlacza używane są specyfikatory formatu. Na przykład ciąg formatu „%d-%m-%y%h:%m:%s” określa datę i godzinę w tym formularzu:

14-04-2020 13:09:42

Poniżej znajdują się specyfikatory konwersji, mogą być używane do sformatowanego wyświetlacza:

Specyficzny Oznaczający
%A Skrócona nazwa dnia powszedniego zgodnie z obecną lokalizacją.
%A Nazwa dnia powszedniego zgodnie z obecną lokalizacją.
%B Nazwa skróconego miesiąca zgodnie z obecną lokalizacją.
%B Nazwa pełnego miesiąca zgodnie z obecną lokalizacją.
%C Preferowana reprezentacja daty i godziny dla obecnej lokalizacji.
%D Jako liczba dziesiętna na miesiąc (zakres 01–11).
%H Korzystanie z 24 -godzinnych (zakres 00 - 23) do godziny jako liczba dziesiętna.
%I Używając 12 -godzinnych (zakres 00–23) do godziny jako liczba dziesiętna.
%J Jako liczba dziesiętna na dzień roku (zakres 001-366).
%M Jako liczba dziesiętna dla miesiąca (zakres 01–12).
%M Liczba dziesiętna minuty.
%P Na podstawie określonej wartości czasu, „AM” lub „PM” lub równoważnych ciągów dla bieżącej lokalizacji.
%S Liczba dziesiętna drugiego.
%X Preferowane przedstawienie daty bieżącej lokalizacji, ale bez czasu.
%X Preferowane reprezentacja czasu dla bieżącej lokalizacji, ale bez daty.
%y Rok jest dziesiętny, ale bez stulecia (zakres od 00–99).
%Y Rok jest dziesiętny, w tym wiek.
%Z Strefa czasowa.

Korzystanie z GetTimeofDay w celu pomiaru czasu wykonania programu

#włączać
#włączać
int main ()
struktur start czasowy, koniec;
GetTimeofDay (& start, null);
dla (int i = 0; i <1e5 ; i++)

GetTimeofday (& End, Null);
printf („Czas wymagany do 10^5 to: %ld micro sekundy \ n”,
((koniec.TV_SEC * 1000000 + END.TV_USEC) -
(początek.TV_SEC * 1000000 + Start.tv_usec)));
powrót 0;

Wyjście:

Ten przykład pokazuje, jak getTimeofday () Do obliczania czasu wykonywania programu można wykorzystać funkcję.

Wniosek

W ten sposób getTimeofday () Funkcja może być używana w Linux. Do przenoszenia istniejącego kodu, getTimeofday () Funkcja może być używana, ale w nowym kodzie nie należy jej używać. clock_gettime () Funkcja może być używana zamiast getTimeofday ().