c++ - 在 Linux 中使用 C++ 设置系统日期和时间

标签 c++ linux datetime

我正在开发一个将系统日期和时间更改为指定值的跨平台应用程序。我已经完成了 Windows 的部分。

如何在 Linux 中通过 C++ 程序设置系统日期和时间?我正在寻找类似于 SetSystemTime(SYSTEMTIME &x) 的函数。

据我所知,settimeofday() 对日期没有任何作用,我不确定函数 stime() 的用法。我希望 mktime() 与我的需求无关。

谁能帮帮我

最佳答案

你理解错了。 settimeofday(2)正在设置 Epoch time .这既是日期又是时间。阅读time(7)

因此,如果您从表示日期的字符串开始,请使用 strptime(3) 转换该字符串到一个 struct tm 然后用 mktime(3) 把它转换成 Unix 时间然后将其提供给 settimeofday(即 tv_sec 字段)。

但是,settimeofday 需要 root 权限,我相信您通常应该避免调用它(至少在通常情况下,Internet 连接的计算机上)。最好设置一些NTP Linux PC 上的客户端服务(例如,运行 ntpdchrony,更一般地阅读有关 keeping time 的系统管理章节 ...)。另见 adjtimex(2)

顺便说一句,突然更改 multi-tasking 上的系统时间系统 - 如 Linux 或 Windows - 是一个非常危险的操作(因为它会扰乱和干扰许多系统任务,具体取决于或使用时间)。这样做的理由很少(通常这是一个非常糟糕的主意)。如果您这样做,请在运行很少的程序和服务的情况下执行此操作(例如 single user mode Linux)。你不应该在普通的应用程序代码中这样做。

关于c++ - 在 Linux 中使用 C++ 设置系统日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28314543/

相关文章:

c++ - 将自定义数据传递给 MPxLocator (Maya API) 的属性

c++ - 对象被其他对象引用时const限定符的微妙问题

c++ - 尝试重定向 cmd.exe stdout 时无输出

linux - 用shell脚本中的空行替换文件的一行?

linux - grep特定单词

sql - 将 INT 转换为 DATETIME (SQL)

c++ - 指针模板特化

ruby - 为什么 POSIX 信号在某些 Linux 机器上被忽略?

针对字符串的 c# 单元测试日期时间

perl - 如何计算Perl中两个日期之间的天数?