gettimeofday
1. gettimeofday.2.man
Manpage of GETTIMEOFDAY
GETTIMEOFDAY
Section: Руководство программиста Linux (2)Updated: 2009-03-25
Index Return to Main Contents
ИМЯ
gettimeofday, settimeofday - получить/установить времяОБЗОР
#include <sys/time.h> int gettimeofday(struct timeval *tv, struct timezone *tz); int settimeofday(const struct timeval *tv, const struct timezone *tz);Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
ОПИСАНИЕ
Функция gettimeofday() и settimeofday() позволяют получить и задать время, а также часовой пояс. Аргумент tv имеет тип struct timeval (определён в <sys/time.h>):
struct timeval {
time_t tv_sec; /* секунды */
suseconds_t tv_usec; /* микросекунды */
};
и задаёт количество секунд и микросекунд, прошедших с начала эпохи (см. time(2)). Аргумент tz имеет тип struct timezone:
struct timezone {
int tz_minuteswest; /* количество минут западнее Гринвича */
int tz_dsttime; /* тип корректировки DST */
};
Если tv или tz имеют значение NULL, то соответствующая структура не задана и не будет возвращена.
Способ работы через структуру timezone устарел; аргумент tz должен равняться NULL. Поле tz_dsttime никогда не использовалось в Linux; оно не поддерживалось и не будет поддерживаться в libc или glibc. Любое появление этого поля в исходном коде ядра (за исключением его объявления) является ошибкой. Поэтому всё, что описано ниже, представляет собой только исторический интерес.
Поле tz_dsttime содержит символьную константу (значения приведены ниже), которая включает в себя информацию о сезонной коррекции времени (Daylight Saving Time). (Замечание: эта величина постоянна и указывает лишь на алгоритм коррекции.) Существующие алгоритмы сезонной коррекции:
DST_NONE /* без коррекции (без dst) */
DST_USA /* коррекция для США */
DST_AUST /* коррекция для Австралии */
DST_WET /* коррекция для Западной Европы */
DST_MET /* коррекция для Центральной Европы */
DST_EET /* коррекция для Восточной Европы */
DST_CAN /* коррекция для Канады */
DST_GB /* Коррекция для Великобритании и Ирландии */
DST_RUM /* коррекция для Румынии */
DST_TUR /* коррекция для Турции */
DST_AUSTALT /* коррекция для Австралии начиная с 1986 года */
Разумеется, коррекцию для каждой страны нельзя описать простым алгоритмом, так как этот фактор может зависеть даже от непредсказуемых политических решений. Поэтому этот метод представления часовых поясов больше не используется. В Linux при вызове settimeofday() поле tz_dsttime должно содержать нулевое значение.
В Linux существует специфическое понятие «временной сдвиг» (warp clock), связанное с системным вызовом settimeofday(), который образуется при самом первом вызове (после загрузки), если аргумент tz не равен NULL, аргумент tv равен NULL и поле tz_minuteswest не равно нулю. В этом случае предполагается, что время аппаратных часов (CMOS clock) местное и к нему должен быть добавлен этот параметр для того, чтобы получилось время UTC. Но, как мы и говорили, использовать этот метод не рекомендуется.
Для работы со структурой timeval существуют макросы, описанные в timeradd(3).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении gettimeofday() и settimeofday() возвращают 0, или -1 в случае ошибки (errno устанавливается в соответствующее значение).ОШИБКИ
- EFAULT
- Одно из значений в tv или tz находится вне доступного адресного пространства.
- EINVAL
- Неправильный часовой пояс (или что-то ещё).
- EPERM
- У вызывающего процесса недостаточно прав для вызова settimeofday(); в Linux для этого требуется мандат CAP_SYS_TIME.
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, 4.3BSD. В POSIX.1-2001 описан gettimeofday(), но нет settimeofday(). В POSIX.1-2008 вызов gettimeofday() помечен как устаревший, вместо него рекомендуется использовать clock_gettime(2).ЗАМЕЧАНИЯ
Обычно, поля struct timeval имеют тип long.
СМОТРИТЕ ТАКЖЕ
date(1), adjtimex(2), time(2), ctime(3), ftime(3), capabilities(7), time(7)
Index
This document was created by man2html using the manual pages.
Time: 17:41:40 GMT, May 11, 2012


