linux时间的设置有其接口,在linux中通常以设备文件存在,多在/dev/这个目录中,读写这个目录中的文件就可以控制系统中的设备,
时间设置相关的是被就是/dev/rtc
读写这个文件就能真正的修改系统时间(root权限)
例如下面两个函数
int getsystemtime()
{
int fd;
struct rtc_time rtc_tm;
memset(&rtc_tm, 0, sizeof(struct rtc_time));
//打开rtc文件
fd = open("/dev/rtc", O_RDWR);
if( fd == -1 )
{
fprintf(stderr, "Open /dev/rtc failed~~!/n");
return -1;
}
//从rtc中获取当前时间
if(!ioctl(fd, RTC_RD_TIME, &rtc_tm))
{
if(rtc_tm.tm_mon == 0)
{
rtc_tm.tm_mon = 12;
rtc_tm.tm_year = rtc_tm.tm_year -1;
}
sysdate.sysyear = rtc_tm.tm_year+1900;
sysdate.sysmonth = rtc_tm.tm_mon;
sysdate.sysday = rtc_tm.tm_mday;
sysdate.syshour = rtc_tm.tm_hour;
sysdate.sysmin = rtc_tm.tm_min;
sysdate_show = sysdate;
close(fd);
return -1;
}
fprintf(stderr, "ioctl with RTC_RD_TIME failed~~!/n");
close(fd);
return 0;
}
//保存系统时间
int save_time_setting()
{
sysdate = sysdate_show;
int fd, i;
struct rtc_time rtc_tm;
memset(&rtc_tm, 0, sizeof(struct rtc_time));
//打开系统设备rtc
fd = open("/dev/rtc", O_RDWR);
if( fd < 0)
{
printf("err open /dev/rtc/n");
return -1;
}
rtc_tm.tm_year = sysdate.sysyear-1900;
rtc_tm.tm_mon = sysdate.sysmonth;
rtc_tm.tm_mday = sysdate.sysday;
rtc_tm.tm_hour = sysdate.syshour;
rtc_tm.tm_min = sysdate.sysmin;
rtc_tm.tm_sec = 0;
rtc_tm.tm_wday = rtc_tm.tm_yday = rtc_tm.tm_isdst = 0;
printf("save@@rtc_tm:year(%d)mon(%d)day(%d)hour(%d)min(%d)/n",
rtc_tm.tm_year,rtc_tm.tm_mon,rtc_tm.tm_mday,
rtc_tm.tm_hour,rtc_tm.tm_min);
//写入系统时间
if( ioctl(fd, RTC_SET_TIME, &rtc_tm) != 0 )
{
fprintf(stderr, "ioctl with RTC_SET_TIME failed~~!/n");
close (fd);
return -1;
}
close(fd);
return 1;
}