Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       gettimeofday, settimeofday - получает/устанавливает время

БИБЛИОТЕКА

       Стандартная библиотека языка C (libc, -lc)

ОБЗОР

       #include <sys/time.h>

       int gettimeofday(struct timeval *restrict tv,
                        struct timezone *_Nullable restrict tz);
       int settimeofday(const struct timeval *tv,
                        const struct timezone *_Nullable tz);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       settimeofday():
           Начиная с glibc 2.19:
               _DEFAULT_SOURCE
           В версии glibc 2.19 и более ранних:
               _BSD_SOURCE

ОПИСАНИЕ

       Функция gettimeofday() и settimeofday() позволяют получить и задать время, а также часовой пояс.

       The tv argument is a struct timeval (as specified in <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()  and settimeofday()  return 0 for success.  On error, -1 is returned and errno is  set  to
       indicate the error.

ОШИБКИ

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

       EINVAL (settimeofday()): неверное значение timezone.

       EINVAL (settimeofday()): tv.tv_sec is negative or tv.tv_usec is outside the range [0, 999,999].

       EINVAL (начиная с Linux 4.3)
              (settimeofday()):  выполнялась попытка установки времени в значение меньше текущего значения часов
              CLOCK_MONOTONIC (смотрите clock_gettime(2)).

       EPERM  У вызывающего процесса недостаточно прав для вызова settimeofday(); в Linux  для  этого  требуется
              мандат CAP_SYS_TIME.

ВЕРСИИ

   Отличия между библиотекой C и ядром
       На некоторых архитектурах реализация gettimeofday() находится в vdso(7).

       The  kernel accepts NULL for both tv and tz.  The timezone argument is ignored by glibc and musl, and not
       passed to/from the kernel.  Android's bionic passes the timezone argument to/from the kernel, but Android
       does not update the kernel timezone based on the device timezone in Settings, so the kernel's timezone is
       typically UTC.

СТАНДАРТЫ

       gettimeofday()
              POSIX.1-2008 (obsolete).

       settimeofday()
              Отсутствуют.

ИСТОРИЯ

       SVr4, 4.3BSD.  В  POSIX.1-2001  описан  gettimeofday(),  но  нет  settimeofday().  В  POSIX.1-2008  вызов
       gettimeofday() помечен как устаревший, вместо него рекомендуется использовать clock_gettime(2).

       Обычно, поля 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 год */

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

ПРИМЕЧАНИЯ

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

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

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

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

ПЕРЕВОД

       Русский  перевод  этой  страницы  руководства  разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>,
       Dmitry  Bolkhovskikh   <d20052005@yandex.ru>,   Vladislav   <ivladislavefimov@gmail.com>,   Yuri   Kozlov
       <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                  gettimeofday(2)