5

使用 stime() 和 clock_settime() 设置哪个时钟?正如我在 man 中看到的那样,两者都可以设置 Linux 时间。函数 stime() 设置“时间概念”,而带有参数 CLOCK_REALTIME 的 clock_settime() 可以设置“系统范围的 RTC”。

1)这些时钟是什么?
2)有什么不同吗?
3)他们是否也设置了硬件时钟?
4) 如果没有:有人知道在 C/C++ 中设置 hwclock 而不使用 ioctl() 的聪明方法吗?

[更新 1]
更具体的第 4 点:C 的等价物是std::system("/sbin/hwclock -w")什么?

4

3 回答 3

1

抱歉这个简短的回答我实际上只是想发表评论,但它不允许我这样做。

很好,可以帮助您解决您的问题 4。对 Google 的一些快速研究将我发送到 https://github.com/karelzak/util-linux/blob/master/sys-utils/hwclock.c 我没有超过 2 次研究此代码分钟,但快速搜索显示第 468 行:

static void set_hardware_clock(const time_t newtime, const bool universal, const bool testing)

编辑:

顺便说一句,请查看维基百科http://en.wikipedia.org/wiki/Util-linux 和 man rtc

于 2014-03-21T16:05:44.790 回答
1

我在 MrSykkox 提供的帮助下回答了我的问题。

我阅读了http://linux.die.net/man/4/rtc并查看了 sys-utils 的给定来源。两者都向我展示了有很多不同的硬件时钟类型,如 CMOS、RTC、KD 等。在 sys-utils 代码的一部分中,我发现一些描述符是通过打开一些特定设备来设置的,例如 /dev/rtc、/dev/rtc0、/dev/misc/rtc、/dev/port 专用于读取。当然,我找到了用于设置 RTC 的 ioctl() 东西。

结论

  1. 这些时钟是什么?
    • Linux 不仅知道 2 个时钟。有两类:软件时钟和硬件时钟。
  2. 有什么不同吗?
    • 系统时钟是内核维护的软件时钟
    • 即使系统处于低功耗状态(包括“关闭”),RTC 也可以运行,而系统时钟则不能。
  3. 他们还设置硬件时钟吗?
    • 系统时钟仅设置内核维护的时钟
  4. 有人知道不使用 ioctl() 在 C/C++ 中设置 hwclock 的聪明方法吗?std::system("/sbin/hwclock -w") 的 C 等效项是什么?
    • RTC 只能由大多数不兼容的 ioctl() 命令设置。
于 2014-03-24T12:37:57.107 回答
0

clock_settime()并且stime()是用于设置系统时间的设置器函数,而不是独立于机器的硬件时钟。

系统启动时,系统时间由硬件时钟设置。Linux 有一个用于处理硬件时钟的命令,即hwclock. 有关更多信息,请查看此链接: http: //linux.die.net/man/8/hwclock

于 2012-10-08T11:49:51.260 回答