Как использовать функцию gettimeofday на языке C?

How Use Gettimeofday Function C Language



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

Синтаксис

intgettimeofday( структуравремя*город, структурачасовой пояс*tz)

В gettimeofday () функция определена в sys / time.h заголовочный файл.







Аргументы

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



1уларгумент указывает на время состав. В время структура объявлена ​​как показано ниже в sys / time.h заголовочный файл:



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

Структура struct timeval представляет собой календарное время. Он состоит из двух членов:





  • tv_sec : Это количество секунд с начала эпохи.
  • tv_usec : Это дополнительные микросекунды после вычисления количества секунд с эпохи. .

2ndаргумент указывает на часовой пояс состав. Обычно он должен быть установлен в NULL, потому что структура часового пояса устарело. Этот аргумент предназначен только для обратной совместимости.

Возвращаемые значения

В случае успеха gettimeofday () вернуть 0, в случае неудачи функция возвращает -1.



Просто найдите время и распечатайте

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

intглавный() {
структураtimeval current_time;
gettimeofday(&Текущее время,НУЛЕВОЙ);
printf ('секунд:% ld пмикросекунды:% ld ',
Текущее время.tv_sec,Текущее время.tv_usec);

возвращение 0;
}

Выход:

Здесь, sys / time.h был включен для gettimeofday () функция и временная структура. В gettimeofday () функция устанавливает время в члене структуры timeval (current_time). tv_sec - это целое число секунд, прошедших с начала Эпоха UNIX , в полночь по всемирному координированному времени 1 января 1970 года, а tv_usec - дополнительное количество микросекунд, прошедшее с tv_sec. Если вы запустите программу, вы должны увидеть результат. Каждый раз, когда вы запускаете программу, вывод будет изменяться.

Ошибка аргумента NULL

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

intглавный() {

структураtimeval current_time;
gettimeofday(НУЛЕВОЙ,НУЛЕВОЙ);
возвращение 0;
}

Выход:

В этом примере показан первый аргумент gettimeofday () функция не должна быть ПУСТО (NULL). Предупреждение компиляции появится, если первый аргумент - ПУСТО (NULL).

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

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

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

gettimeofday(&телевидение,НУЛЕВОЙ);
тзнак равнотелевидение.tv_sec;

Информациязнак равно местное время (&т);
printf ('% s', asctime (Информация));
strftime (буфер, размербуфер, 'Сегодня% A,% B% d. п',Информация);
printf ('% s',буфер);
strftime (буфер, размербуфер, 'Время% I:% M% p. п',Информация);
printf ('% s',буфер);

возвращение 0;
}

Выход:

В этом примере показано, как напечатать дату и время в другом формате. Непросто представить даты из возвращаемого значения gettimeofday () функция. Здесь, местное время() а также strftime () функции используются для красивого представления возвращаемого значения gettimeofday () .

В местное время() функция принимает аргумент, который является ссылкой на указатель tv_sec поле struct timeval и возвращает ссылку на указатель struct tm объект.

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

14.04.2020 13:09:42

Ниже приведены спецификаторы преобразования, которые могут использоваться для форматированного отображения:

Спецификатор Имея в виду
Сокращенное название дня недели в соответствии с текущим языковым стандартом.
Название дня недели в соответствии с текущим языковым стандартом.
% b Название сокращенного месяца в соответствии с текущим языковым стандартом.
% B Название полного месяца в соответствии с текущим языковым стандартом.
% c Предпочтительное представление даты и времени для текущего языкового стандарта.
% d В виде десятичного числа числа месяца (диапазон 01–31).
%ЧАС Использование 24-часового диапазона (от 00 до 23) до часа как десятичного числа.
Использование 12-часового диапазона (от 00 до 23) до часа как десятичного числа.
% j В виде десятичного числа для дня года (от 001 до 366).
% m В виде десятичного числа для месяца (диапазон 01–12).
% M Десятичное число минут.
%п В зависимости от указанного значения времени, «am» или «pm» или эквивалентных строк для текущего языкового стандарта.
% S Десятичное число секунды.
% Икс Предпочтительное представление даты для текущего языкового стандарта, но без времени.
% ИКС Предпочтительное представление времени для текущего языкового стандарта, но без даты.
%а также Год является десятичным, но не веком (диапазон от 00 до 99).
%А ТАКЖЕ Год является десятичным, включая век.
%С УЧАСТИЕМ Часовой пояс.

Использование gettimeofday для измерения времени выполнения программы

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

intглавный() {

структураначало отсчета времени,конец;
gettimeofday(&Начните,НУЛЕВОЙ);

для (intязнак равно 0;я<1e5 ;я++) {
}

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

возвращение 0;
}

Выход:

Этот пример показывает, как gettimeofday () Функция может использоваться для расчета времени выполнения программы.

Заключение

Таким образом, gettimeofday () функция может использоваться в Linux. Для переноса существующего кода gettimeofday () функцию можно использовать, но в новом коде ее использовать не следует. clock_gettime () функция может использоваться вместо gettimeofday () .