Главная » 2017 » Ноябрь » 24 » man 2 settimeofday
05:20
man 2 settimeofday

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


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)):

settimeofday():
начиная с glibc 2.19:
_DEFAULT_SOURCE
в glibc 2.19 и старее:
_BSD_SOURCE



ОПИСАНИЕ


Функция 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, то соответствующая структура не задана и не будет
возвращена (однако при компиляции будут выдаваться предупреждения, если tv равно NULL).

Пользоваться структурой timezone не рекомендуется; значением аргумента tz в большинстве
случаев должен быть NULL (см. ЗАМЕЧАНИЯ далее).

В Linux существует специфическое понятие «временной сдвиг» (warp clock), связанное с
системным вызовом settimeofday(), который образуется при самом первом вызове (после
загрузки), если аргумент tz не равен NULL, аргумент tv равен NULL и поле tz_minuteswest не
равно нулю (в этом случае значение поля tz_dsttime должно быть равно нулю). В этом случае
предполагается, что время аппаратных часов (CMOS clock) местное и к нему должен быть
добавлен этот параметр для того, чтобы получилось время UTC. Но, как мы и говорили,
использовать этот метод не рекомендуется.



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


При успешном выполнении gettimeofday() и settimeofday() возвращают 0, или -1 в случае ошибки
(errno устанавливается в соответствующее значение).



ОШИБКИ


EFAULT Одно из значений в tv или tz находится вне доступного адресного пространства.

EINVAL Неправильный часовой пояс (или что-то ещё).



ЗАМЕЧАНИЯ


На время, возвращаемое gettimeofday(), влияют скачки в системном времени (например, если
системный администратор вручную изменил системное время). Если вам требуются однообразно
увеличивающееся время, смотрите clock_gettime(2).

Для работы со структурой timeval существуют макросы, описанные в timeradd(3).

Обычно, поля struct timeval имеют тип long.

Поле tz_dsttime
В системах с не ядрами Linux, но с glibc, полю tz_dsttime из struct timezone вызов
gettimeofday() присвоит ненулевое значение, если в текущем часовом поясе уже применялось или
будет применяться правило перехода на летнее время. В этом смысле это зеркально отражает
назначение daylight(3) для текущего пояса. В Linux с glibc значение поля tz_dsttime из
struct timezone никогда не используется в settimeofday() или gettimeofday(). Таким образом,
следующий абзац представляет только исторический интерес.

В старых системах поле tz_dsttime содержит символьную константу (значения приведены ниже),
которая включает в себя информацию о сезонной коррекции времени (Daylight Saving Time)
(замечание: эта величина постоянна и указывает лишь на алгоритм коррекции). Существующие
алгоритмы сезонной коррекции:

DST_NONE /* нет DST */
DST_USA /* американский DST */
DST_AUST /* австралийский DST */
DST_WET /* западноевропейский DST */
DST_MET /* средневосточный DST */
DST_EET /* восточноевропейский DST */
DST_CAN /* Канада */
DST_GB /* Великобритания и Ирландия */
DST_RUM /* Румыния */
DST_TUR /* Турция */
DST_AUSTALT /* австралийский со сдвигом на 1986 год */

Разумеется, коррекцию для каждой страны нельзя описать простым алгоритмом, так как этот
фактор может зависеть даже от непредсказуемых политических решений. Поэтому этот метод
представления часовых поясов больше не используется.



СМОТРИТЕ ТАКЖЕ


date(1), adjtimex(2), clock_gettime(2), time(2), ctime(3), ftime(3), timeradd(3),
capabilities(7), time(7), vdso(7), hwclock(8)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 452 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar