当前位置: 首页 > 面试题库 >

如何在Linux中检测系统时间的变化?

卢黎明
2023-03-14
问题内容

当时间服务器中的系统时间有更新或由于DST更改时,是否有办法得到通知?我正在执行API /系统调用或等效操作。

我的工作之一是在不使用SQL的情况下,将类似于SQL NOW()的值的生成优化为一个小时的粒度。


问题答案:

您可以使用timerfd_create(2)创建一个计时器,然后TFD_TIMER_CANCEL_ON_SET在设置它时用选项标记它。将其设置为将来不可行的时间,然后在其上进行阻止(使用轮询/选择等)-如果系统时间更改,则计时器将被取消,您可以检测到。

(这是systemd的工作方式)

例如:

#include <sys/timerfd.h>
#include <limits.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>

int main(void) {
        int fd = timerfd_create(CLOCK_REALTIME, 0);
        timerfd_settime(fd, TFD_TIMER_ABSTIME | TFD_TIMER_CANCEL_ON_SET,
                        &(struct itimerspec){ .it_value = { .tv_sec = INT_MAX } },
                        NULL);
        printf("Waiting\n");
        char buffer[10];
        if (-1 == read(fd, &buffer, 10)) {
                if (errno == ECANCELED)
                        printf("Timer cancelled - system clock changed\n");
                else
                        perror("error");
        }
        close(fd);
        return 0;
}


 类似资料:
  • 问题内容: 我正在研究需要检测系统关闭的应用程序。但是,我没有找到任何可靠的方式来接收此事件的通知。 我知道在关机时,我的应用会收到一个信号,然后是。我想知道是否有任何方法可以查询a 是否 为关机序列的一部分 ? 有谁知道是否有一种以编程方式查询(C API)的方法吗? 据我所知,系统没有提供任何其他方法来查询即将发生的关机。如果确实如此,那也将解决我的问题。我也一直在尝试,但是更改似乎是瞬时的,

  • 问题内容: 我想测量Java中的经过时间。但是和的差异(我相信)可以通过外部更改(例如,某人(或系统)更改系统时钟)来更改。 不能使用网络电话,因为它可能会非常频繁且需要快速返回。 有一个通用的解决方案吗? 编辑 抱歉,我应该详细说明原因。并不是要阻止恶意用户-就像是客户端启动的闲置客户端注销和常规的客户端事件。 问题答案: 这并不能真正回答您的问题,但是错误#6458294暗示,在可能的情况下,

  • 问题内容: 我试图将自定义行为添加到系统类(FileInputStream / FileOutputStream)。我用以下转换方法编写了自定义ClassFileTransformer: 当我运行示例程序时: 我看到没有系统类没有传递给转换。 有什么办法可以修改系统类?提前致谢! 问题答案: 在调用pre- main方法并添加ClassFileTransformer之前,已经加载了一些(不是全部)

  • 问题内容: 相对较新。似乎微不足道,但我不知道如何检测操作系统版本。我知道我可以使用并获得平台和体系结构,但是说我知道我在linux上,但是我想确定我是否在RH6上,而在RH7上,等等。 问题答案: 因此,至少在Linux上,软件包中确实存在这种晦涩的方法。它填充的结构有点笨拙,没有文档说明,但是您可以了解它的要点: 顺便说一句,这在操场上不起作用,可能是由于沙箱的限制,但是在Linux上起作用。

  • 本文向大家介绍linux系统下的时间配置综述,包括了linux系统下的时间配置综述的使用技巧和注意事项,需要的朋友参考一下 一.时间类型分为: 1.网络时间(设置时区,ntp服务器同步的时间) 2.系统时间,当前系统所显示的时间 3.硬件(RTC)时间,主板上面Bios的时间 一般设置为:系统时间与网络时间同步,系统时间写入硬件时间。 二.时间的查看方式: 1.查看硬件时间 2.查看系统时间 3.

  • 在我的Android应用程序中,我使用的是时间类。我理解当前时间是这样的: 但我遇到的问题是如何在时间类中创建晚上8点的设置值。不仅仅是:,因为这是一个字符串,而是一个整数。所以我被难倒了。