Provided by: manpages-ru-dev_4.19.0-7_all bug

ИМЯ

       rtime - получение времени с удалённого узла

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <rpc/auth_des.h>

       int rtime(struct sockaddr_in *addrp, struct rpc_timeval *timep,
                 struct rpc_timeval *timeout);

ОПИСАНИЕ

       Для  получения  времени  с  удалённого  компьютера функция использует протокол Time Server
       Protocol, описанный в RFC 868.

       Time Server Protocol возвращает время в секундах начиная с 1  января  1900  года  00:00:00
       UTC.   Данная  функция  самостоятельно  вычитает  подходящую  константу  для  того,  чтобы
       преобразовать результат в секундах от начала Эпохи — 1970-01-01 00:00:00 +0000 (UTC).

       Если timeout не равно NULL, то будет использоваться сокет  udp/time  (порт  37),  иначе  —
       сокет tcp/time (порт 37).

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

       On  success, 0 is returned, and the obtained 32-bit time value is stored in timep->tv_sec.
       In case of error -1 is returned, and errno is set to indicate the error.

ОШИБКИ

       Могут  возникнуть  все  ошибки  задействованных  в  работе  функций  (sendto(2),  poll(2),
       recvfrom(2), connect(2), read(2)), а также:

       EIO    Количество возвращённых байт не равно 4.

       ETIMEDOUT
              Время ожидания, указанное в таймауте, превышено.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).

       ┌───────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ИнтерфейсАтрибутЗначение │
       ├───────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │rtime()                                                │ Безвредность в нитях │ MT-Safe  │
       └───────────────────────────────────────────────────────┴──────────────────────┴──────────┘

ЗАМЕЧАНИЯ

       Поддерживается только IPv4.

       Некоторые   версии  in.timed  поддерживают  только  TCP.  Попробуйте  пример  программы  с
       установленной в 1 значением use_tcp.

ДЕФЕКТЫ

       rtime() в glibc 2.2.5 и ниже на 64-битных компьютерах работает некорректно.

ПРИМЕРЫ

       Для этого примера требуется поднятие  и  открытие  порта  37.  Вы  можете  проверить  это,
       убедившись в том, что в файле /etc/inetd.conf запись time раскомментирована.

       Программа  подключается  к  компьютеру  с  именем  «linux».  Использование  «localhost» не
       сработает. В качестве результата будет возвращено локальное время компьютера «linux».

       #include <errno.h>
       #include <netdb.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>
       #include <time.h>

       #include <rpc/auth_des.h>

       static int use_tcp = 0;
       static const char servername[] = "linux";

       int
       main(void)
       {
           int                 ret;
           time_t              t;
           struct hostent      *hent;
           struct rpc_timeval  time1 = {0, 0};
           struct rpc_timeval  timeout = {1, 0};
           struct sockaddr_in  name;

           memset(&name, 0, sizeof(name));
           sethostent(1);
           hent = gethostbyname(servername);
           memcpy(&name.sin_addr, hent->h_addr, hent->h_length);

           ret = rtime(&name, &time1, use_tcp ? NULL : &timeout);
           if (ret < 0)
               perror("rtime error");
           else {
               t = time1.tv_sec;
               printf("%s\n", ctime(&t));
           }

           exit(EXIT_SUCCESS);
       }

СМ. ТАКЖЕ

       ntpdate(1), inetd(8)

ПЕРЕВОД

       Русский перевод этой страницы руководства был сделан aereiae  <aereiae@gmail.com>,  Azamat
       Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Katrin Kutepova
       <blackkatelv@gmail.com>, Lockal <lockalsash@gmail.com>, Yuri Kozlov  <yuray@komyakino.ru>,
       Баринов Владимир и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.