Как да използвам функцията gettimeofday на език C?

How Use Gettimeofday Function C Language



The gettimeofday () функция получава часовника на системата. Текущото време се изразява в изминали секунди и микросекунди от 00:00:00 часа, 1 януари 1970 г. (Unix Epoch). В тази статия ще ви покажем как да използвате gettimeofday () функция в Linux. И така, нека започнем.

Синтаксис

intgettimeofday( структураtimeval*град, структурачасова зона*tz)

The gettimeofday () функцията е дефинирана в sys/time.h заглавен файл.







Аргументи

Тази функция приема два аргумента:



1уларгументът сочи към timeval структура. The timeval структурата е декларирана както по -долу в sys/time.h заглавен файл:



структураtimeval{
time_t tv_sec; // използва се за секунди
suseconds_t tv_usec; // използва се за микросекунди
}

Структурата timeval структура представлява календарно време. Той има два члена:





  • tv_sec : Това е броят на секундите от епохата.
  • tv_usec : Това са допълнителни микросекунди след изчисление на броя секунди от епохата. .

2ndаргументът сочи към часова зона структура. Обикновено трябва да бъде зададено на NULL, защото struct часова зона е остарял. Този аргумент е само за обратна съвместимост.

Връщащи стойности

За успеха, gettimeofday () връщане 0, при неуспех функцията връща -1.



Просто получаване на време и печат

#включва
#включва

intглавен() {
структураtimeval current_time;
gettimeofday(&текущо време,НУЛА);
printf ('секунди: %ldнмикросекунди: %ld ',
текущо време.tv_sec,текущо време.tv_usec);

връщане 0;
}

Изход:

Тук, sys/time.h е включен за gettimeofday () функция и времева структура. The gettimeofday () функция задава времето в timeval (current_time) член на структурата. tv_sec е интегралният брой секунди, изминали от началото на UNIX епоха , в полунощ UTC на 1 януари 1970 г. и tv_usec е допълнителен брой микросекунди, изминали от tv_sec. Ако стартирате програмата, трябва да видите изхода. Всеки път, когато стартирате програмата, изходът ще се промени.

Грешка в аргумента NULL

#включва
#включва

intглавен() {

структураtimeval current_time;
gettimeofday(НУЛА,НУЛА);
връщане 0;
}

Изход:

В този пример показва, че първият аргумент на gettimeofday () функцията не трябва да е NULL. Предупреждението за компилация ще се появи, ако първият аргумент е NULL.

Пример за форматиране на текущо време

#включва
#включва
#включва

intглавен() {
структураtimeval tv;
time_t t;
структураtm*информация;
charбуфер[64];

gettimeofday(&телевизия,НУЛА);
T=телевизияtv_sec;

информация= местно време (&T);
printf ('%с', по -рано (информация));
strftime (буфер, размер набуфер, „Днес е %A, %B %d.н',информация);
printf ('%с',буфер);
strftime (буфер, размер набуфер, „Времето е %I: %M %p.н',информация);
printf ('%с',буфер);

връщане 0;
}

Изход:

В този пример е показано как да отпечатате дата и час в различен формат. Не е много лесно да се представят дати от връщаната стойност на gettimeofday () функция. Тук, местно време() и strftime () функции се използват, за да представят добре връщаната стойност на gettimeofday () .

The местно време() function приема аргумент, който е препратка към указател на tv_sec в сферата на struct timeval и връща препратка към указател на a struct tm обект.

The strftime () функцията ще генерира персонализиран, форматиран низ, показващ датата и часа от struct tm показалец. Спецификаторите за формат се използват за форматиран дисплей. Например, низът за формат%d-%m-%Y%H:%M:%S определя датата и часа в тази форма:

14-14-2020 13:09:42

Следните спецификатори на преобразуване могат да се използват за форматиран дисплей:

Спецификатор Значение
%да се Съкратеното име на делничния ден според настоящия локал.
%ДА СЕ Името на делничния ден според настоящия локал.
% b Име на съкратения месец според настоящия локал.
% B Име на пълния месец според сегашния език.
% ° С Предпочитаното представяне на дата и час за настоящия локал.
Като десетично число за деня на месеца (диапазон 01 - 31).
%H Използване на 24 часа (диапазон 00-23) до часа като десетично число.
%I Използвайки 12 часа (диапазон 00-23) до часа като десетично число.
%j Като десетично число за деня в годината (диапазон 001-366).
%m Като десетично число за месеца (диапазон 01 - 12).
Десетичното число на минутата.
%p Въз основа на посочената стойност на времето, „am“ или „pm“ или еквивалентните низове за текущия локал.
Десетичното число на втория.
% х Предпочитано представяне на датата за текущия локал, но без време.
% Х Предпочитано представяне на часа за текущия локал, но без дата.
Годината е десетична, но без век (диапазон от 00 - 99).
Годината е десетична, включително век.
Часовата зона.

Използване на gettimeofday за измерване на времето за изпълнение на програмата

#включва
#включва

intглавен() {

структураtimeval старт,край;
gettimeofday(&започнете,НУЛА);

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

gettimeofday(&край,НУЛА);
printf („Времето за преброяване до 10^5 е: %ld микросекундин',
((край.tv_sec * 1000000 +край.tv_usec) -
(започнете.tv_sec * 1000000 +започнете.tv_usec)));

връщане 0;
}

Изход:

Този пример показва, че как gettimeofday () функция може да се използва за изчисляване на времето за изпълнение на програма.

Заключение

По този начин, gettimeofday () функцията може да се използва в Linux. За пренасяне на съществуващ код, gettimeofday () функцията може да се използва, но в нов код не трябва да се използва. clock_gettime () функция може да се използва вместо gettimeofday () .