Книга: Программирование для Linux. Профессиональный подход
8.7, Функция gettimeofday(): системные часы
8.7, Функция gettimeofday(): системные часы
Функция gettimeofday()
определяет текущее системное время. В качестве аргумента она принимает структуру типа timeval
, в которую записывается значение времени (в секундах), прошедшее с начала эпохи UNIX (1-е января 1970 г., полночь по Гринвичу). Это значение разделяется на два поля. В поле tv_sec
хранится целое число секунд, а в поле tv_usec
— дополнительное число микросекунд. У функции есть также второй аргумент, который должен быть равен NULL
. Функция объявлена в файле <sys/time.h>
.
Результат, возвращаемый функцией gettimeofday()
, мало подходит для отображения на экране, поэтому существуют библиотечные функции localtime()
и strftime()
, преобразующие это значение в нужный формат. Функция localtime()
принимает указатель на число секунд (поле tv_sec
структуры timeval
) и возвращает указатель на структуру типа tm
. Эта структура содержит поля, заполняемые параметрами времени в соответствии с локальным часовым поясом:
? tm_hour
, tm_min
, tm_sec
— текущее время (часы, минуты, секунды);
? tm_year
, tm_mon
, tm_day
— год, месяц, день;
? tm_wday
— день недели (значение 0 соответствует воскресенью);
? tm_yday
— день года;
? tm_isdst
— флаг, указывающий, учтено ли летнее время.
Функция strftime()
на основании структуры tm
создает строку, отформатированную по заданному правилу. Формат напоминает тот, что используется в функции printf()
: указывается строка с кодами, определяющими включаемые поля структуры. Например, форматная строка вида
"%Y-%m-%d %Н:%М:%S"
соответствует такому результату:
2001-01-14 13:09:42
Функции strftime()
необходимо задать указатель на текстовый буфер, куда будет помещена полученная строка, длину буфера, строку формата и указатель на структуру типа tm
. Следует учесть, что ни функция localtime()
, ни функция strftime()
не учитывают дробную часть текущего времени (поле tv_usec
структуры timeval
). Об этом должен позаботиться программист.
Объявления функций localtime()
и strftime()
находятся в файле <time.h>
.
Программа, показанная в листинге 8.6, отображает текущие дату и время с точностью до миллисекунды.
- 2.1.3. Функция getopt_long()
- Системные переменные ROWS_AFFECTED, GDSCODE, SQLCODE, TRANSACTIONJD, CONNECTIONJD
- Группировка по встроенным функциям и UDF
- Часы в Windows показывают неправильное время
- 19.1.1. Функция jQuery()
- Функция strcmp( )
- Системные вызовы и драйверы устройств
- Управление функциями узла
- ГЛАВА 5. СИСТЕМНЫЕ ОПЕРАЦИИ ДЛЯ РАБОТЫ С ФАЙЛОВОЙ СИСТЕМОЙ
- Системные вызовы управления процессорной привязкой
- Функция программного обеспечения
- Почему за время, пока компьютер выключен, сильно отстают системные часы, сбивается дата?