使用stime()和clock_settime()设置什么?

时间:2012-10-04 15:52:10

标签: c++ c clock

使用stime()和clock_settime()设置哪个时钟?正如我在人类中所读到的,两者都可以设置Linux时间。函数stime()设置“时间的概念”和clock_settime()与参数CLOCK_REALTIME可以设置“系统范围的RTC”。

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

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

3 个答案:

答案 0 :(得分:1)

很抱歉这个简短的回答我其实只想做评论,但它不会允许我这样做。

很好地帮助您解决问题4。 谷歌的一些快速研究让我前往 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)

编辑:

BTW查看维基百科http://en.wikipedia.org/wiki/Util-linux 和男人rtc

答案 1 :(得分: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. 有什么不同吗?
    • 系统时钟是由内核维护的软件时钟
    • 即使系统处于低功耗状态(包括&#34;关闭&#34;),RTC也可以运行,系统时钟也不能运行。
  3. 他们还设置了HW时钟吗?
    • 系统时钟仅设置内核维护时钟
  4. 有没有人知道在不使用ioctl()的情况下在C / C ++中设置hwclock的聪明方法?什么是std :: system的C等价物(&#34; / sbin / hwclock -w&#34;)?
    • RTC只能由大多数不兼容的ioctl()命令设置。

答案 2 :(得分:-1)

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

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