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)。
Interface | Attribute | Value |
rtime() | Thread safety | MT-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); }
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。