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

How Use Gettimeofday Function C Language



ten pobierzporędnia() funkcja pobiera czas systemowy. Aktualny czas jest wyrażony w sekundach i mikrosekundach, które upłynęły od 00:00:00, 1 stycznia 1970 (Unix Epoch). W tym artykule pokażemy, jak korzystać z pobierzporędnia() funkcja w systemie Linux. Więc zacznijmy.

Składnia

intgettimeofday( strukturaczas*Miasto, strukturastrefa czasowa*tz)

ten pobierzporędnia() funkcja jest zdefiniowana w sys/czas.h plik nagłówkowy.







Argumenty

Ta funkcja przyjmuje dwa argumenty:



1NSargument wskazuje na czas Struktura. ten czas struktura jest zadeklarowana jak poniżej w sys/czas.h plik nagłówkowy :



strukturaczas{
time_t tv_sec; //używane przez sekundy
suseconds_t tv_usec; //używane przez mikrosekundy
}

Struktura timeval struct reprezentuje czas kalendarzowy. Ma dwóch członków:





  • tv_sec : Jest to liczba sekund od epoki.
  • tv_usec :Jest to dodatkowe mikrosekundy po obliczeniu liczby sekund od epoki. .

2NSargument wskazuje na strefa czasowa Struktura. Zwykle powinien być ustawiony na NULL, ponieważ struktura strefy czasowej jest przestarzały. Ten argument dotyczy tylko wstecznej kompatybilności.

Zwróć wartości

Po sukcesie pobierzporędnia() zwraca 0, w przypadku niepowodzenia funkcja zwraca -1.



Proste pobieranie czasu i drukowanie

#włączać
#włączać

intGłówny() {
strukturaczas aktualny_czas;
gettimeofday(&Obecny czas,ZERO);
printf ('sekundy: %ld mikro sekundy : %ld',
Obecny czas.tv_sec,Obecny czas.tv_usec);

powrót 0;
}

Wyjście:

Tutaj, sys/czas.h został uwzględniony dla pobierzporędnia() funkcja i struktura czasowa. ten pobierzporędnia() funkcja ustaw czas w składowej struktury timeval (current_time). tv_sec to całkowita liczba sekund, które upłynęły od początku programu Epoka UNIX , o północy UTC 1 stycznia 1970 i tv_usec to dodatkowa liczba mikrosekund, które upłynęły od tv_sec. Jeśli uruchomisz program, powinieneś zobaczyć dane wyjściowe. Za każdym razem, gdy uruchomisz program, dane wyjściowe się zmienią.

Błąd argumentu NULL

#włączać
#włączać

intGłówny() {

strukturaczas aktualny_czas;
gettimeofday(ZERO,ZERO);
powrót 0;
}

Wyjście:

W tym przykładzie pokazuje, że pierwszy argument pobierzporędnia() funkcja nie powinna mieć wartości NULL. Ostrzeżenie o kompilacji pojawi się, jeśli pierwszy argument będzie miał wartość NULL.

Przykład formatowania aktualnego czasu

#włączać
#włączać
#włączać

intGłówny() {
strukturatelewizja;
czas_t t;
strukturatm*informacje;
zwęglaćbufor[64];

gettimeofday(&telewizja,ZERO);
T=telewizja.tv_sec;

informacje= czas lokalny (&T);
printf ('%s', asctime (informacje));
strftime (bufor, rozmiarbufor, 'Dzisiaj jest %A, %B %d. ',informacje);
printf ('%s',bufor);
strftime (bufor, rozmiarbufor, 'Czas to %I:%M %p. ',informacje);
printf ('%s',bufor);

powrót 0;
}

Wyjście:

W tym przykładzie pokazano, jak wydrukować datę i godzinę w innym formacie. Nie jest łatwo reprezentować daty ze zwracanej wartości pobierzporędnia() funkcja . Tutaj, czas lokalny() oraz strftime() funkcje służą do ładnego reprezentowania zwracanej wartości pobierzporędnia() .

ten czas lokalny() funkcja przyjmuje argument, który jest odniesieniem do wskaźnika funkcji tv_sec pole struktura czasowa i zwraca odwołanie do wskaźnika a struktura tm obiekt.

ten strftime() funkcja wygeneruje spersonalizowany, sformatowany ciąg pokazujący datę i godzinę z struktura tm wskaźnik. Specyfikatory formatu są używane do sformatowanego wyświetlania. Na przykład ciąg formatu %d-%m-%Y %H:%M:%S określa datę i godzinę w tym formularzu:

04-14-2020 13:09:42

Poniżej znajdują się specyfikatory konwersji, których można użyć do sformatowanego wyświetlania:

Specyficzny Oznaczający
%do Skrócona nazwa dnia tygodnia zgodnie z obecną lokalizacją.
%DO Nazwa dnia tygodnia 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 bieżącej lokalizacji.
%D Jako liczba dziesiętna dla dnia miesiąca (zakres 01 – 31).
%H Używając 24 godzin (zakres 00 – 23) do godziny jako liczby dziesiętnej.
%I Używając 12-godzin (zakres 00 – 23) do godziny jako liczby dziesiętnej.
%J Jako liczba dziesiętna dla dnia roku (zakres 001-366).
%m Jako liczba dziesiętna 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 sekundy.
% x Preferowana reprezentacja daty dla aktualnej lokalizacji, ale bez czasu.
% X Preferowana reprezentacja czasu dla bieżącej lokalizacji, ale bez daty.
%oraz Rok jest dziesiętny, ale nie ma wieku (zakres od 00 do 99).
%ORAZ Rok jest dziesiętny, włączając wiek.
%Z Strefa czasowa.

Używanie gettimeofday do mierzenia czasu wykonania programu

#włączać
#włączać

intGłówny() {

strukturapoczątek czasu,kończyć się;
gettimeofday(&początek,ZERO);

dla (inti= 0;i<1e5 ;i++) {
}

gettimeofday(&kończyć się,ZERO);
printf ('Czas potrzebny do odliczenia do 10^5 to: %ld mikro sekund ',
((kończyć się.tv_sec * 1000000 +kończyć się.tv_usec) -
(początek.tv_sec * 1000000 +początek.tv_usec)));

powrót 0;
}

Wyjście:

Ten przykład pokazuje, że jak pobierzporędnia() funkcja może służyć do obliczania czasu wykonania programu.

Wniosek

W ten sposób pobierzporędnia() funkcja może być używana w Linuksie. Aby przenieść istniejący kod, pobierzporędnia() funkcja może być użyta, ale w nowym kodzie nie należy jej używać. zegar_gettime() funkcja może być użyta zamiast pobierzporędnia() .