Linux不同时钟的区别
今天发现项目中调用 clock_gettime 函数传入时钟类型参数时有 CLOCK_MONOTONIC、CLOCK_MONOTONIC_RAW、CLOCK_BOOTTIME、CLOCK_REALTIME 几种,对这几种时钟类型的区别有些疑惑,于是查阅了函数的说明文档,编写代码测试,以加深对clock_gettime 函数的理解
测试代码
#include <time.h>
#include<iostream>
using namespace std;
void mono_time_test()
{
struct timespec sp;
clock_gettime(CLOCK_MONOTONIC, &sp);
std::cout << "mono_time...sec:" << sp.tv_sec << std::endl;
}
void real_time_test()
{
struct timespec sp;
clock_gettime(CLOCK_REALTIME, &sp);
std::cout << "real_time...sec:" << sp.tv_sec << std::endl;
}
void boot_time_test()
{
struct timespec sp;
clock_gettime(CLOCK_BOOTTIME, &sp);
std::cout <<"boot_time..sec:" << sp.tv_sec << std::endl;
}
void mono_raw_time_test()
{
struct timespec sp;
clock_gettime(CLOCK_MONOTONIC_RAW, &sp);
std::cout << "mono_raw_time...sec:" << sp.tv_sec << std::endl;
}
int main(int argc, char* argv[])
{
mono_time_test();
mono_raw_time_test();
boot_time_test();
real_time_test();
return 1;
}
- 使用以下命令编译代码,生成测试程序
[wl@ecs-centos-7 my]$ g++ -o main main.cpp
[wl@ecs-centos-7 my]$ ll
total 16
-rwxrwxr-x 1 wl wl 9264 Apr 10 23:30 main
-rw-rw-r-- 1 wl wl 848 Apr 10 23:23 main.cpp
机器时间测试
- 修改机器时间前,执行测试程序,输出如下结果
[wl@ecs-centos-7 my]$ ./main
mono_time...sec:71
mono_raw_time...sec:71
boot_time..sec:71
real_time...sec:1586532575
[wl@ecs-centos-7 my]$ date -d "1970-01-01 UTC 1586532575 seconds" "+%F %T"
2020-04-10 23:29:35
- 执行以下命令,修改机器时间
[root@ecs-centos-7 my]$ date -s "2020-04-11 23:30:08"
- 机器时间修改完成,执行测试程序,输出如下结果
[root@ecs-centos-7 my]# date
Sat Apr 11 23:30:01 CST 2020
[wl@ecs-centos-7 my]$ ./main
mono_time...sec:178
mono_raw_time...sec:178
boot_time..sec:178
real_time...sec:1586619008
[wl@ecs-centos-7 ~]$ date -d "1970-01-01 UTC 1586619008 seconds" "+%F %T"
2020-04-11 23:30:08
测试结果
CLOCK_MONOTONIC、CLOCK_MONOTONIC_RAW、CLOCK_BOOTTIME 都不随物理机器时间改变而改变
CLOCK_REALTIME 是随物理机器时间改变而改变的
系统休眠测试
下面测试系统休眠对几种时钟的影响,为了对比休眠测试的结果,休眠前后都需要执行一次测试程序
- 休眠前,执行测试程序,下面是输出结果
[wl@ecs-centos-7 my]$ ./main
mono_time...sec:45
mono_raw_time...sec:45
boot_time..sec:45
real_time...sec:1586535342
- 执行以下命令,使系统进入休眠
注意:systemctl suspend 命令需要慎重,为避免执行后无法唤醒系统,建议先确保机器可以唤醒休眠。我是通过云服管理后台唤醒系统的
[wl@ecs-centos-7 my]$ systemctl suspend
==== AUTHENTICATING FOR org.freedesktop.login1.suspend ===
Authentication is required for suspending the system.
Authenticating as: root
Password:
==== AUTHENTICATION COMPLETE ===
- 唤醒系统,执行测试程序,下面是输出结果
[wl@ecs-centos-7 my]$ ./main
mono_time...sec:237
mono_raw_time...sec:237
boot_time..sec:367
real_time...sec:1586535664
测试结果
CLOCK_MONOTONIC、CLOCK_MONOTONIC_RAW 不包含系统休眠期间的时间
CLOCK_BOOTTIME、CLOCK_REALTIME 包含系统休眠期间的时间
物理机器重启测试
- 重启机器之前,执行测试程序,下面是输出结果
[wl@ecs-centos-7 my]$ ./main
mono_time...sec:2510
mono_raw_time...sec:2510
boot_time..sec:2640
real_time...sec:1586537938
- 执行以下命令重启机器
[wl@ecs-centos-7 my]$ reboot
==== AUTHENTICATING FOR org.freedesktop.login1.reboot ===
Authentication is required for rebooting the system.
Authenticating as: root
Password:
==== AUTHENTICATION COMPLETE ===
- 重启完成,执行测试程序,下面是输出结果
[wl@ecs-centos-7 my]$ ./main
mono_time...sec:41
mono_raw_time...sec:41
boot_time..sec:41
real_time...sec:1586537997
测试结果
- 重启物理机器对 CLOCK_REALTIME 没有任何影响
- 重启物理机器后, CLOCK_MONOTONIC、CLOCK_MONOTONIC_RAW、CLOCK_BOOTTIME 时间全部重新计数
参考
https://linux.die.net/man/2/clock_gettime
Linux不同时钟的区别的更多相关文章
- linux系统时钟和硬件时钟不一致
在做DB2 集群复制的时候要求两台主机时间相互一致. 但是在一台主机上系统时间和硬件时间相差12个小时左右:手动同步后,重启后又相差12个小时左右. 为什么会是这样的,先介绍下系统时钟和硬件时钟的区别 ...
- linux 实时时钟(RTC)驱动【转】
转自:http://blog.csdn.net/yaozhenguo2006/article/details/6820218 这个是linux内核文档关于rtc实时时钟部分的说明,此文档主要描述了rt ...
- Linux 系统时钟(date) 硬件时钟(hwclock)
/********************************************************************* * Linux 系统时钟(date) 硬件时钟(hwclo ...
- linux 通用时钟框架CCF
linux CCF 时钟框架 简单介绍 这里讲的时钟是给soc各组件提供时钟的树状框架,并非内核使用的时间,和其它模块一样,clk也有框架,用以适配不同的平台.适配层之上是客户代码和接口,也就是各模块 ...
- linux 和unix 的区别
Linux与Unix的区别 某些PC机的Unix和Linux在实现方面相类似.几乎所有的商业Unix版本都基本支持同样的软件.程序设计环境和网络特性.然而,Linux和Unix的商业版本依然存在许多 ...
- Linux系统时钟的更改
linux系统时钟有两个,一个是硬件时钟,即BIOS时间,就是我们进行CMOS设置时看到的时间,另一个是系统时钟,是linux系统Kernel时间. 查看.设置硬件时间: 查看系统硬件时钟 hwclo ...
- Linux的优缺点,Linux与windows的区别
Linux 一. 什么是linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议. ...
- php windows与linux下的路径区别
php windows与linux下的路径区别windows用的是"\",linux用的是"/"这一点要特别清楚,, ps:在PHP windows也可以用/表 ...
- Linux系统 关机/重启/用户切换/注销,用户管理(用户创建/修改,用户组增加/删除),Linux中 / 和 ~ 的区别
1.关机/重启命令 shutdown命令 shutdown -h now :立即关机 shutdown -h 1 :1分钟后关机 shutdown -r now :立即重启 shutdown -r 1 ...
随机推荐
- XiaoQi.Study项目(二)
一.EF Core 使用的补充 1) 创建 接口 IEFCoreService 2) 实现 接口 EFCoreService 3) 在Startup.cs 中注册 ef 服务 并在控制器中注入使用 ...
- 页面高度自适应方法(PC、移动端都适用)
有个项目移动端的首页需要自适应. 宽度已经自适应了 , 高度也要自适应 ,先总结一下方法,PC端也适用. $(function(){ var h = window.innerHeight; $(&qu ...
- Android UI性能测试——使用 Gfxinfo 衡量性能
Android官方文档翻译 原文地址:https://developer.android.com/training/testing/performance参考:https://www.jianshu. ...
- F版本SpringCloud 2—什么是SpringCloud?SpringCloud版本选择
引言:搭建微服务架构就像是买电脑,使用SpringCloud就是在买品牌机. 前言 昂,美好的天气里,不想直接说技术,给小伙伴萌看看傍晚的天空吧. -- 能找到天上的北极星吗? 上一篇文章中,通过一个 ...
- C语言之歌词解析
0x00 脚下的路 不知道为啥要写这个小标题,可能是年轻的心想体验一下苍老的感觉,抑或是少年的一阵迷茫.混沌的四年,终究还是入了这一行.从初时的不知,到现在的刚开始,中间的间隔竟是四年之久,想起了陈奕 ...
- weblogic漏洞练习
About WebLogic WebLogic是美商Oracle的主要产品之一,系购并得来.是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第 ...
- django之forms组件,cookie&session
forms组件 先自己实现注册功能,并且对用户输入的信息加限制条件如果用户输入的信息不符合条件,前端展示报错信息 from django.shortcuts import render,HttpRes ...
- 题解 P6249 【神帖】
这道题目我一看到就想起了经典题--关路灯 但是时间好像不太好搞啊! 我们可以枚举时间qwq 考虑 \(4\) 维 \(dp\) \(f_{i,j,t,0/1}\) 表示 \(zrl\) 看了第 \(i ...
- Ali_Cloud++:阿里云Centos配置iptables防火墙教程
虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 1):检查iptab ...
- Fast Enumeration
在 Objective-C 2.0 中提供了快速枚举的语法,它是我们遍历集合元素的首选方法.它具有以下优点: 比直接使用 NSEnumerator 更高效: 语法非常简洁: 如果集合在遍历的过程中被修 ...