当前位置: 首页 > news >正文

系统时钟和硬件时钟同步

硬件时钟调整与系统时钟一致:

//system("hwclock -w")

int SyncSystemClockToHw(void)
{
	struct timeval tv;
	struct tm tm_time;
	int fd;
	int ret = 0;

	ret = access("/dev/rtc1",F_OK);
	if(0 == ret)
	{
		fd = open("/dev/rtc1", O_WRONLY);//只写
		if (fd < 0)
		{
			TIMER_INFO("open /dev/rtc0  failed!");
			return -1;
		}
	}
	else
	{
		fd = open("/dev/rtc0", O_WRONLY);
		if (fd < 0)
		{
			TIMER_INFO("open /dev/rtc0  failed!");
			return -1;
		}
	}

	gettimeofday(&tv, NULL);
	/* Prepare tm_time */
		
	localtime_r((time_t*)&tv.tv_sec, &tm_time);
	tm_time.tm_isdst = 0;
	
	ioctl(fd, RTC_SET_TIME, &tm_time);
	
	close(fd);
	return 0;
	//system("hwclock -w");
}


系统时钟调整与硬件时钟一致:

//system("hwclock -s")

int SyncHwClockToSystem(void)
{

	struct timeval tv;
	struct timezone tz;
	struct tm tm_time;
	int fd;
	int ret = 0;

	gettimeofday(&tv, &tz);

	ret = access("/dev/rtc1",F_OK);
	if(0 == ret)
	{
		fd = open("/dev/rtc1", O_WRONLY);//只写
		if (fd < 0)
		{
			TIMER_INFO("open /dev/rtc0  failed!");
			return -1;
		}
	}
	else
	{
		fd = open("/dev/rtc0", O_WRONLY);
		if (fd < 0)
		{
			TIMER_INFO("open /dev/rtc0  failed!");
			return -1;
		}
	}

	memset(&tm_time, 0, sizeof(tm_time));
	ioctl(fd, RTC_RD_TIME, &tm_time);
	tm_time.tm_isdst = -1; /* "not known" */

	close(fd);

	tv.tv_sec = mktime(&tm_time);
	tv.tv_usec = 0;
	if (settimeofday(&tv, &tz))
	{
		TIMER_INFO("settimeofday failed!");
		return -1;
	}

	return 0;
	//system("hwclock -s");
}

转载于:https://www.cnblogs.com/wangfengju/p/6172362.html

相关文章:

  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • zblog2.0博客建站视频教程
  • Product Google的十大设计原则
  • 如何修复U盘提示被写保护的问题
  • 浅谈Docker(一)
  • 使用SharedPreferences存储数据
  • [JDBC-1] JDBC Base Template
  • Ant编译环境
  • 中转server
  • sl4a
  • SGU[107] 987654321 problem
  • study notes: high performance linux server programming
  • 阿里云修改CentOS Linux服务器的主机名
  • JavaScript-4.6鼠标事件监听,获取鼠标坐标window.event---ShinePans
  • 清华差生10年奋斗经历 读大学的意义好处 人就是你越尊重别人,别人越尊重你 优秀是一种习惯,懒惰是一种惯性。人和人的差别又是就是因为每天积累差了一点点...
  • JS 中的深拷贝与浅拷贝
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 「面试题」如何实现一个圣杯布局?
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 10个确保微服务与容器安全的最佳实践
  • CSS魔法堂:Absolute Positioning就这个样
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Git初体验
  • Python - 闭包Closure
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Travix是如何部署应用程序到Kubernetes上的
  • 微信公众号开发小记——5.python微信红包
  • 译米田引理
  • 追踪解析 FutureTask 源码
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​TypeScript都不会用,也敢说会前端?
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (13):Silverlight 2 数据与通信之WebRequest
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (3)nginx 配置(nginx.conf)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (论文阅读40-45)图像描述1
  • (一)为什么要选择C++
  • *Django中的Ajax 纯js的书写样式1
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net core 控制台应用程序读取配置文件app.config
  • .net 使用ajax控件后如何调用前端脚本
  • .NET 指南:抽象化实现的基类
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .Net各种迷惑命名解释
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?