#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <linux/rtc.h>
/*
#include <linux/rtc.h> //包含下面的结构体和宏定义
typedef struct {
unsigned int year;
unsigned int month;
unsigned int date;
unsigned int hour;
unsigned int minute;
unsigned int second;
unsigned int weekday;
}rtc_time;
#define RTC_RD_TIME _IOR('p', 0x09, rtc_time) //
#define RTC_SET_TIME _IOW('p', 0x0a, rtc_time)
*/
bool isSetTime = false;
void getRtcTime(struct tm *p_tm) {
int rtcTime = open("/dev/rtc0",O_RDWR);
struct rtc_time rtc_tm;
int ret = ioctl(rtcTime, RTC_RD_TIME, &rtc_tm); //如果需要写进去此处改为RTC_SET_TIME,后面先赋值再ioctl
if(ret < 0)
{
printf("ioctl: RTC_RD_TIME failed\n");
return -1;
}
p_tm->tm_year = rtc_tm.tm_year + 1900;
p_tm->tm_mon = rtc_tm.tm_mon + 1;
p_tm->tm_mday = rtc_tm.tm_mday;
p_tm->tm_hour = rtc_tm.tm_hour;
p_tm->tm_min = rtc_tm.tm_min;
p_tm->tm_sec = rtc_tm.tm_sec;
p_tm->tm_wday = rtc_tm.tm_wday;
}
int main(int argc, char* argv[]){
struct timeval tv;
struct tm *tm;
if (Rtc_Read(&tm) < 0)
{
printf("Read Rtc ime Failed\n");
return -1;
}
printf("rtc time: %04d-%02d-%02d %02d:%02d:%02d\n", tm->tm_year, tm->tm_mon, tm->tm_mday, tm.tm_hour,tm.tm_min, tm.tm_sec);
#if define SYS_COMMAND_WRITE
if(!isSetTime) {
isSetTime = true;
char command[64];
memset(command, 0, sizeof(command));
system(command);
}
#elif define SYS_INTERFACE_WRITE
// 将RTC时间设置为系统时间
tm.tm_mon = tm.tm_mon - 1;
tm.tm_year = tm.tm_year - 1900;
//gettimeofday(&tp, &tz);
if(!isSetTime) {
isSetTime = true;
t = mktime(&tm);
tv.tv_sec = t;
tv.tv_usec = 0;
if(settimeofday(&tv, 0))
{
printf("Set system datetime error!\n");
return -1;
}
}
#endif
}
获取rtc时钟时间并设置
于 2024-02-01 19:36:47 首次发布
本文详细介绍了如何在Linux环境下使用C语言操作RTC(Real-TimeClock)设备,包括读取当前时间并将其设置为系统时间。主要涉及`RTC_read`、`ioctl`函数以及时间格式转换。
摘要由CSDN通过智能技术生成