我正在尝试将服务器时间与客户端时间同步,我获得了获取服务器时间的代码,如下所示。如果我在服务器上运行它,则在客户端登录时。我将向客户端发送时间,但是如何将“客户端”系统时间更改为从服务器发送的时间。
我搜索了setenv之类的东西,但是如何实际上改变Linux C++中的时间呢?
使用下面的代码,我可以获得当前时间:
/* localtime example */
#include <stdio.h>
#include <time.h>
int main ()
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "Current local time and date: %s", asctime (timeinfo) );
return 0;
}
最佳答案
Linux(或Unix,或Posix)系统从unix epoch开始测量时间。最低层(与时间相关的syscalls和内核)实际上没有涉及任何时区。时区是通过localtime(3)和strftime(3)等功能实现的库功能。
另请阅读time(7)手册页。
您确实想使用NTP protocol(使用ntpd
,chrony
,ntpdate
....)或至少rdate
(但最好是NTP)来同步时间(在本地和远程计算机上)。
查询时间的系统调用为gettimeofday(2),time(2),clock_gettime(2)和CLOCK_REALTIME
您可以使用settimeofday(2)和adjtimex(2)系统调用来设置时间。这通常需要root特权。