.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1992 Drew Eckhardt (drew@cs.colorado.edu), March 28, 1992 .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified by Michael Haardt (michael@moria.de) .\" Modified 1993-07-23 by Rik Faith (faith@cs.unc.edu) .\" Modified 1994-08-21 by Michael Chastain (mec@shell.portal.com): .\" Fixed necessary '#include' lines. .\" Modified 1995-04-15 by Michael Chastain (mec@shell.portal.com): .\" Added reference to adjtimex. .\" Removed some nonsense lines pointed out by Urs Thuermann, .\" (urs@isnogud.escape.de), aeb, 950722. .\" Modified 1997-01-14 by Austin Donnelly (and1000@debian.org): .\" Added return values section, and bit on EFAULT .\" Added clarification on timezone, aeb, 971210. .\" Removed "#include ", aeb, 010316. .\" Modified, 2004-05-27 by Michael Kerrisk .\" Added notes on capability requirement. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH gettimeofday 2 "28 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ gettimeofday, settimeofday \- получает/устанавливает время .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBint gettimeofday(struct timeval *restrict \fP\fItv\fP\fB,\fP \fB struct timezone *_Nullable restrict \fP\fItz\fP\fB);\fP \fBint settimeofday(const struct timeval *\fP\fItv\fP\fB,\fP \fB const struct timezone *_Nullable \fP\fItz\fP\fB);\fP .fi .PP .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .PP \fBsettimeofday\fP(): .nf Начиная с glibc 2.19: _DEFAULT_SOURCE В версии glibc 2.19 и более ранних: _BSD_SOURCE .fi .SH ОПИСАНИЕ Функция \fBgettimeofday\fP() и \fBsettimeofday\fP() позволяют получить и задать время, а также часовой пояс. .PP The \fItv\fP argument is a \fIstruct timeval\fP (as specified in \fI\fP): .PP .in +4n .EX struct timeval { time_t tv_sec; /* секунды */ suseconds_t tv_usec; /* микросекунды */ }; .EE .in .PP и задаёт количество секунд и микросекунд, прошедших с начала эпохи (см. \fBtime\fP(2)). .PP Аргумент \fItz\fP имеет тип \fIstruct timezone\fP: .PP .in +4n .EX struct timezone { int tz_minuteswest; /* количество минут западнее Гринвича */ int tz_dsttime; /* тип корректировки DST */ }; .EE .in .PP .\" FIXME . The compilation warning looks to be going away in glibc 2.17 .\" see glibc commit 4b7634a5e03b0da6f8875de9d3f74c1cf6f2a6e8 .\" The following is covered under EPERM below: .\" .PP .\" Only the superuser may use .\" .BR settimeofday (). Если \fItv\fP или \fItz\fP имеют значение NULL, то соответствующая структура не задана и не будет возвращена (однако при компиляции будут выдаваться предупреждения, если \fItv\fP равно NULL). .PP Пользоваться структурой \fItimezone\fP не рекомендуется; значением аргумента \fItz\fP в большинстве случаев должен быть NULL (см. ЗАМЕЧАНИЯ далее). .PP В Linux существует специфическое понятие «временной сдвиг» (warp clock), связанное с системным вызовом \fBsettimeofday\fP(), который образуется при самом первом вызове (после загрузки), если аргумент \fItz\fP не равен NULL, аргумент \fItv\fP равен NULL и поле \fItz_minuteswest\fP не равно нулю (в этом случае значение поля \fItz_dsttime\fP должно быть равно нулю). В этом случае предполагается, что время аппаратных часов (CMOS clock) местное и к нему должен быть добавлен этот параметр для того, чтобы получилось время UTC. Но, как мы и говорили, использовать этот метод не рекомендуется. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" \fBgettimeofday\fP() and \fBsettimeofday\fP() return 0 for success. On error, \-1 is returned and \fIerrno\fP is set to indicate the error. .SH ОШИБКИ .TP \fBEFAULT\fP Одно из значений в \fItv\fP или \fItz\fP находится вне доступного адресного пространства. .TP \fBEINVAL\fP (\fBsettimeofday\fP()): неверное значение \fItimezone\fP. .TP \fBEINVAL\fP (\fBsettimeofday\fP()): \fItv.tv_sec\fP is negative or \fItv.tv_usec\fP is outside the range [0, 999,999]. .TP \fBEINVAL\fP (начиная с Linux 4.3) .\" commit e1d7ba8735551ed79c7a0463a042353574b96da3 (\fBsettimeofday\fP()): выполнялась попытка установки времени в значение меньше текущего значения часов \fBCLOCK_MONOTONIC\fP (смотрите \fBclock_gettime\fP(2)). .TP \fBEPERM\fP У вызывающего процесса недостаточно прав для вызова \fBsettimeofday\fP(); в Linux для этого требуется мандат \fBCAP_SYS_TIME\fP. .SH ВЕРСИИ .SS "Отличия между библиотекой C и ядром" На некоторых архитектурах реализация \fBgettimeofday\fP() находится в \fBvdso\fP(7). .PP The kernel accepts NULL for both \fItv\fP and \fItz.\fP 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. .SH СТАНДАРТЫ .TP \fBgettimeofday\fP() POSIX.1\-2008 (obsolete). .TP \fBsettimeofday\fP() None. .SH ИСТОРИЯ SVr4, 4.3BSD. В POSIX.1\-2001 описан \fBgettimeofday\fP(), но нет \fBsettimeofday\fP(). В POSIX.1\-2008 вызов \fBgettimeofday\fP() помечен как устаревший, вместо него рекомендуется использовать \fBclock_gettime\fP(2). .PP .\" Обычно, поля \fIstruct timeval\fP имеют тип \fIlong\fP. .SS "Поле tz_dsttime" .\" it has not .\" been and will not be supported by libc or glibc. .\" Each and every occurrence of this field in the kernel source .\" (other than the declaration) is a bug. В системах с не ядрами Linux, но с glibc, полю \fItz_dsttime\fP из \fIstruct timezone\fP вызов \fBgettimeofday\fP() присвоит ненулевое значение, если в текущем часовом поясе уже применялось или будет применяться правило перехода на летнее время. В этом смысле это зеркально отражает назначение \fBdaylight\fP(3) для текущего пояса. В Linux с glibc значение поля \fItz_dsttime\fP из \fIstruct timezone\fP никогда не используется в \fBsettimeofday\fP() или \fBgettimeofday\fP(). Таким образом, следующий абзац представляет только исторический интерес. .PP В старых системах поле \fItz_dsttime\fP содержит символьную константу (значения приведены ниже), которая включает в себя информацию о сезонной коррекции времени (Daylight Saving Time) (замечание: эта величина постоянна и указывает лишь на алгоритм коррекции). Существующие алгоритмы сезонной коррекции: .PP .in +4n .EX \fBDST_NONE\fP /* нет DST */ \fBDST_USA\fP /* американский DST */ \fBDST_AUST\fP /* австралийский DST */ \fBDST_WET\fP /* западноевропейский DST */ \fBDST_MET\fP /* средневосточный DST */ \fBDST_EET\fP /* восточноевропейский DST */ \fBDST_CAN\fP /* Канада */ \fBDST_GB\fP /* Великобритания и Ирландия */ \fBDST_RUM\fP /* Румыния */ \fBDST_TUR\fP /* Турция */ \fBDST_AUSTALT\fP /* австралийский со сдвигом на 1986 год */ .EE .in .PP Разумеется, коррекцию для каждой страны нельзя описать простым алгоритмом, так как этот фактор может зависеть даже от непредсказуемых политических решений. Поэтому этот метод представления часовых поясов больше не используется. .SH ЗАМЕЧАНИЯ На время, возвращаемое \fBgettimeofday\fP(), \fIвлияют\fP скачки в системном времени (например, если системный администратор вручную изменил системное время). Если вам требуются однообразно увеличивающееся время, смотрите \fBclock_gettime\fP(2). .PP Для работы со структурой \fItimeval\fP существуют макросы, описанные в \fBtimeradd\fP(3). .SH "СМ. ТАКЖЕ" \fBdate\fP(1), \fBadjtimex\fP(2), \fBclock_gettime\fP(2), \fBtime\fP(2), \fBctime\fP(3), \fBftime\fP(3), \fBtimeradd\fP(3), \fBcapabilities\fP(7), \fBtime\fP(7), \fBvdso\fP(7), \fBhwclock\fP(8) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Dmitry Bolkhovskikh , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .