> Linux Reviews > man >

gettimeofday


  1. gettimeofday.2.man


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

settimeofday(): _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, то соответствующая структура не задана и не будет возвращена.

Способ работы через структуру 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:19 GMT, October 23, 2013

SVENSKA - SVENSKA - SVENSKA - ja - nl