RTIME - Linux手册页

时间:2019-08-20 18:01:13  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2020-06-09

名称

rtime-从远程计算机获取时间

语法

#include <rpc/auth_des.h>

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

说明

此功能使用RFC 868中描述的时间服务器协议从远程计算机获取时间。

时间服务器协议以秒为单位给出了自1900年1月1日UTC时间00:00:00起的时间,该函数减去适当的常数以将结果转换为自1970年1月1日00:00:00以来的秒数。 +0000(UTC)。

如果超时为非NULL,则使用udp / time套接字(端口37)。否则,将使用tcp / time套接字(端口37)。

返回值

成功时,返回0,并将获得的32位时间值存储在timep-> tv_sec中。如果出现错误-1,则将errno进行适当设置。

错误说明

可能会发生基础函数的所有错误(sendto(2),poll(2),recvfrom(2),connect(2),read(2))。此外:

EIO
返回的字节数不是4。
ETIMEDOUT
超时中定义的等待时间已到期。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
rtime()Thread safetyMT-Safe

备注

仅支持IPv4。

某些in.timed版本仅支持TCP。尝试将use_tcp设置为1的示例程序。

Libc5使用原型

int rtime(struct sockaddr_in *, struct timeval *, struct timeval *);

并且需要而不是。

BUGS

glibc 2.2.5和更早版本中的rtime()在64位计算机上无法正常工作。

示例

此示例要求打开并打开端口37。您可以检查/etc/inetd.conf中的时间条目是否未注释掉。

该程序连接到名为" linux"的计算机。使用" localhost"不起作用。结果是计算机" linux"的本地时间。

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

static int use_tcp = 0;
static char *servername = "linux";

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

    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 {
        time_t t = time1.tv_sec;
        printf("%s\n", ctime(&t));
    }

    exit(EXIT_SUCCESS);
}

另外参见

ntpdate(1),inetd(8)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/