【问题标题】:Set time in linux from c program从c程序在linux中设置时间
【发布时间】:2016-09-27 05:17:27
【问题描述】:

我想通过 c 程序设置/更改我的系统的时间。我在互联网上搜索了很多,但没有找到任何满意的结果。我在 settimeofday 有一个 llok,但它需要自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的秒和微秒。

但我想要一些我可以明确给出日期、年、月、小时、分钟和秒的东西,并且应该设置 UTC 时间。

是否有任何 c 库函数或任何其他可用的机制?

【问题讨论】:

  • 秒部分需要mktime();您需要仔细选择亚秒。您需要成为root 才能设置时间。为什么不使用date 命令来完成这项工作——它有一个模式。
  • 请注意,设置时间可能会使某些软件许可证(如 Oracle)失效。您可能必须重建操作系统,因为一旦检测到它无效,您就永远无法将其设置回有效状态。

标签: c linux


【解决方案1】:
  1. 将 YYMMDDhhss 格式的时间放入 struct time。您可以忽略 星期几一年中的星期几 字段。在tm_isdst中输入一个负值,让系统决定当天夏令时是否生效。
  2. 使用指向 struct time 的指针调用 mk_time - 它将填充结构中缺少的字段并返回设置为该日期的 time_t
  3. settimeofday()struct timeval 中的返回值一起使用(您喜欢的微秒部分)。时区参数使用“NULL”。

注意你需要有适当的(root)权限来设置系统时间,还要注意settimeofday在Linux上有一些特殊性,所以强烈建议阅读手册页

显然,以上所有内容都需要在您的程序中包含time.h

【讨论】:

  • mk_time 应该是 mktime。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多