rtime(3) Library Functions Manual rtime(3)

rtime - obține ora de la o mașină de la distanță

Biblioteca C standard (libc, -lc)

#include <rpc/auth_des.h>
int rtime(struct sockaddr_in *addrp, struct rpc_timeval *timep,
          struct rpc_timeval *timeout);

Această funcție utilizează protocolul Time Server Protocol (protocolul serverului de timp), așa cum este descris în RFC 868, pentru a obține ora de la o mașină la distanță.

Protocolul serverului de timp oferă timpul în secunde de la 00:00:00 UTC, 1 ianuarie 1900, iar această funcție scade constanta corespunzătoare pentru a converti rezultatul în secunde de la Epocă, 1970-01-01 00:00:00:00 +0000 (UTC).

Atunci când timeout este diferit de NULL, se utilizează soclul udp/time (portul 37). În caz contrar, se utilizează soclul tcp/time (portul 37).

În caz de succes, se returnează 0, iar valoarea de timp pe 32 de biți obținută este stocată în timep->tv_sec. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

Pot apărea toate erorile pentru funcțiile de bază (sendto(2), poll(2), recvfrom(2), connect(2), read(2)). În plus:

Numărul de octeți returnat nu este 4.
Timpul de așteptare definit în „timeout” a expirat.

Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).

Interfață Atribut Valoare
rtime() Siguranța firelor MT-Safe

Doar protocolul IPv4 este acceptat.

Unele versiuni in.timed acceptă numai TCP. Încercați programul de exemplu cu use_tcp fixată la 1.

rtime() în glibc 2.2.5 și versiunile anterioare nu funcționează corect pe mașinile pe 64 de biți.

Acest exemplu necesită ca portul 37 să fie activat și deschis. Puteți verifica dacă intrarea de timp din /etc/inetd.conf nu este comentată.

Programul se conectează la un calculator numit „linux”. Utilizarea „localhost” nu funcționează. Rezultatul este ora locală a calculatorului „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("eroare rtime");
    else {
        t = time1.tv_sec;
        printf("%s\n", ctime(&t));
    }
    exit(EXIT_SUCCESS);
}

ntpdate(1), inetd(8)

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

31 octombrie 2023 Pagini de manual de Linux 6.06