当前位置:  技术问答>linux和unix

请教大家,在linux下编程,用什么方法可以设置系统时间?

    来源: 互联网  发布时间:2015-10-21

    本文导语:  我刚开始在linux下编程,用的是C语言。 我想修改系统时间,怎么样可以做到呢? 我查了很久,也没有查到。 看到C库里的函数,都是怎么样获取系统时间的,没有能设置系统时间。 请大家帮忙了,谢谢大家! ...

我刚开始在linux下编程,用的是C语言。

我想修改系统时间,怎么样可以做到呢?

我查了很久,也没有查到。

看到C库里的函数,都是怎么样获取系统时间的,没有能设置系统时间。

请大家帮忙了,谢谢大家!

|
设置BIOS时钟示例:(注意:注释中的代码)
#include 
#include 
//#include 

#define InttoBCD(a) ((a)/10)*16+((a)%10)
//unsigned int InttoBCD(int a);
int set_time ();

#ifndef _ASM_IO_H
#define _ASM_IO_H
#include 
static __inline void
outb_wxy (unsigned char value, unsigned short int port)
{
  //__asm__ __volatile__("outb %b0,%w1nt"
  //                     "outb %%al,$0x80n"
  //                     :
  //                   :"a" (value), "Nd" (port));
  __asm__ __volatile__ ("outb %%al,%%dx"::"a" (value), "d" (port));
}
#endif
/*
unsigned int InttoBCD(int a)
{
    return (a/10)*16+(a%10);
}
*/
int
set_time ()
{
  unsigned char year, month, day, hour, minute, second;
  unsigned int retv;
  unsigned short tmp;

  printf ("Date format:year-month-day hour-minute-secondn");
  printf ("            2-7-18 14-30-50 = 2002/7/18 14:30:50n");

  printf ("input year:");
  scanf ("%d", &tmp);
  year = InttoBCD (tmp);

  printf ("input month:");
  scanf ("%d", &tmp);
  month = InttoBCD (tmp);

  printf ("input day:");
  scanf ("%d", &tmp);
  day = InttoBCD (tmp);

  printf ("input hour:");
  scanf ("%d", &tmp);
  hour = InttoBCD (tmp);

  printf ("input minute:");
  scanf ("%d", &tmp);
  minute = InttoBCD (tmp);

  printf ("input second:");
  scanf ("%d", &tmp);
  second = InttoBCD (tmp);

  printf ("Date(hex):%x-%x-%x-%x-%x-%xn", year, month, day, hour, minute,
  second);
  /*
     retv = ioperm (0x70, 2, 1);
     if (retv == -1)
     {
     printf( "get error.n");
     return 1;
     }
   */
  /*
     outb_wxy(0x00, 0x70);
     outb_wxy(second, 0x71); //sec

     outb_wxy(0x02, 0x70);
     outb_wxy(minute, 0x71);  //min

     outb_wxy(0x04, 0x70);
     outb_wxy(hour, 0x71);  //hour

     outb_wxy(0x07, 0x70);
     outb_wxy(day, 0x71);  //day

     outb_wxy(0x08, 0x70);
     outb_wxy(month, 0x71);  //month

     outb_wxy(0x09, 0x70);
     outb_wxy(year, 0x71);  //year
   */
  /*
     outb(0x00, 0x70);
     outb(second, 0x71); //sec

     outb(0x02, 0x70);
     outb(minute, 0x71);  //min

     outb(0x04, 0x70);
     outb(hour, 0x71);  //hour

     outb(0x07, 0x70);
     outb(day, 0x71);  //day

     outb(0x08, 0x70);
     outb(month, 0x71);  //month

     outb(0x09, 0x70);
     outb(year, 0x71);  //year

     //get BIOS time
     outb (0x00, 0x70);  
     tmp = inb(0x71);  
     printf( "sec:%xn",tmp);

     outb (0x02, 0x70);  
     tmp = inb(0x71);  
     printf( "min:%xn", tmp);  

     outb (0x04, 0x70);  
     tmp = inb(0x71);  
     printf( "hour:%xn", tmp);  

     outb (0x07, 0x70);
     tmp = inb(0x71);  
     printf( "day:%xn", tmp);  

     outb (0x08, 0x70);  
     tmp = inb(0x71);  
     printf( "month:%xn", tmp);  

     outb (0x09, 0x70);  
     tmp = inb(0x71);  
     printf( "year:%xn", tmp);  

     retv = ioperm (0x70, 2, 0);
     if (retv == -1)
     {
     printf( "free error.n");
     return 1;
     } */
  return 0;
}

int
main ()
{
  set_time ();
  return 0;
}

|
void set_sys_time(char* tm)
{
// tm format "05/08/14 21:09:08"

char yy1[2],yy[4],mm[2],dd[2],hour[2],min[2],sec[2];
struct tm _tm;
time_t timep;
struct timeval tv;

memcpy(yy1,tm,2);
    sprintf(yy,"20%s",yy1);

memcpy(mm,tm+3,2);
memcpy(dd,tm+6,2);
memcpy(hour,tm+9,2);
memcpy(min,tm+12,2);
memcpy(sec,tm+15,2);

_tm.tm_sec  = atoi(sec);
_tm.tm_min  = atoi(min);
_tm.tm_hour = atoi(hour);
_tm.tm_mday = atoi(dd);
_tm.tm_mon  = atoi(mm) - 1;
_tm.tm_year = atoi(yy) - 1900;

    timep = mktime(&_tm);

tv.tv_sec  = timep;
tv.tv_usec = 0;
if(settimeofday (&tv, (struct timezone *) 0) 

    
 
 

您可能感兴趣的文章:

  • 请教终端编程&curses编程高手
  • 请教一个shell编程的问题,就是如何在shell编程中读一个文件的内容?谢谢啦!
  • 请教linux下的编程的选择:我听说有gtk+gnome的编程,也有kde里的 什么编程,到底应该选择哪个呢?好象一个是技术好一点,一个是市场占有
  • 请教:我想在unix编程领域发展,我应该在哪些方面努力?
  • 请教Linux下的编程工具
  • 新手请教,linux网络编程。
  • 请教一个多进程编程问题
  • 请教高手:如何学习内核编程?
  • 请教gcc编程 问题 关于调用中断 实现 图形模式
  • 请教linux下c编程的一个问题!
  • 急!!请教关于linux socket编程的一个问题!!
  • 请教LINUX下的网络编程?
  • 请教:想学LINUX内核编程,请指点
  • 请教:Linux下的C++编程和Windows下有什么不同,要注意什么?
  • 请教一下哪里有UNIX下C编程标准下载?
  • 请教串口通信的编程
  • 请教一下:Linux下如何编程制作系统托盘
  • arm串口缓冲和c编程请教
  • 菜鸟请教linux下的网络编程
  • 请教如何学习Linux上的编程
  • WEB前端 iis7站长之家
  • 请教一个vi的设置问题
  • 高分请教:redhat 7.2 如何设置上网问题
  • 请教下我的eth0为什么设置后重启会失败?
  • crontab里设置后没有自动执行,请教高手,急!!!!!!!!!
  • 请教关于vsftp目录设置问题
  • 请教:怎样在 UNIX 设置 telnet 未动作超时时间
  • GTK编程~我在hpanel里加了一个4*1table~里面放了四个button~怎么设置可以使四个button之间有一定的距离~设置table 的边框么?请教下怎么让app的界面固定~不能最大化
  • 请教SPEC文件中怎么样设置软件升级信息
  • 请教一下关于OpenVPN设置
  • 请教iptables设置的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3