Программирование на C

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

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

Синтаксис

int gettimeofday (struct timeval * tp, struct часовой пояс * tz)

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

Аргументы

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

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

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

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

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

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

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

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

#включать
#включать
int main ()
struct timeval current_time;
gettimeofday (& current_time, NULL);
printf ("секунды:% ld \ nмикросекунды:% ld",
Текущее время.tv_sec, current_time.tv_usec);
возврат 0;

Выход:

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

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

#включать
#включать
int main ()
 
struct timeval current_time;
gettimeofday (NULL, NULL);
возврат 0;

Выход:

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

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

#включать
#включать
#включать
int main ()
struct timeval tv;
time_t t;
struct tm * info;
char buffer [64];
 
gettimeofday (& tv, NULL);
t = телевизор.tv_sec;
информация = местное время (& t);
printf ("% s", asctime (информация));
strftime (buffer, sizeof buffer, "Сегодня% A,% B% d.\ n ", информация);
printf ("% s", буфер);
strftime (buffer, sizeof buffer, "Время% I:% M% p.\ n ", информация);
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 Десятичное число секунды.
%Икс Предпочтительное представление даты для текущего языкового стандарта, но без времени.
%ИКС Предпочтительное представление времени для текущего языкового стандарта, но без даты.
% y Год является десятичным, но не веком (диапазон от 00 до 99).
% Y Год является десятичным, включая столетие.
% Z Часовой пояс.

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

#включать
#включать
 
int main ()
 
struct timeval начало, конец;
gettimeofday (& start, NULL);
 
для (int i = 0; i <1e5 ; i++)

 
gettimeofday (& конец, NULL);
printf ("Время, необходимое для подсчета до 10 ^ 5:% ld микросекунд \ n",
((конец.tv_sec * 1000000 + конец.tv_usec) -
(Начало.tv_sec * 1000000 + начало.tv_usec)));
возврат 0;

Выход:

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

Заключение

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

Shadow of the Tomb Raider для Linux Учебное пособие
Shadow of the Tomb Raider - двенадцатое дополнение к серии Tomb Raider - франшизе приключенческой игры, созданной Eidos Montreal. Игра была очень хоро...
Как увеличить FPS в Linux?
FPS означает Кадров в секунду. Задача FPS - измерить частоту кадров при воспроизведении видео или во время игры. Проще говоря, количество непрерывных ...
Лучшие игры Oculus App Lab
Если вы владелец гарнитуры Oculus, вы должны знать о загрузке неопубликованных приложений. Боковая загрузка - это процесс установки на гарнитуру содер...