linux时间(三 系统时间修改追根溯源)

 

  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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值