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

帮忙看下linux c下获取系统时间出现的bug

    来源: 互联网  发布时间:2016-10-29

    本文导语:  源程序如下: #include  #include  struct tm *g_timefields;//Global time  int get_cur_time() {         time_t timeticks;         struct tm *timefields;         timeticks = time(NULL);         timefields = localtime(&timeticks); ...

源程序如下:

#include 
#include 

struct tm *g_timefields;//Global time 

int get_cur_time()
{
        time_t timeticks;
        struct tm *timefields;

        timeticks = time(NULL);

        timefields = localtime(&timeticks);

        return timefields;
}

int main()
{
        
        struct tm *test;//Test time
        g_timefields = get_cur_time();
        
        while(1)
        {
             printf("Global time is %d%02d%02d_%02d n",g_timefields->tm_year + 1900, g_timefields->tm_mon + 1,
                        g_timefields->tm_mday,  g_timefields->tm_hour);   
test= get_cur_time();

        printf("Test time is %d%02d%02d_%02d n",test->tm_year + 1900, test->tm_mon + 1,  
                        test->tm_mday,  test->tm_hour);

  sleep(5);
        }
        return 0;
}



运行时首先出现如下情况:

Global time is 20101220_06 
Test time is 20101220_06 
Global time is 20101220_06 
Test time is 20101220_06 
Global time is 20101220_06 
Test time is 20101220_06 
。。。
这个时候我通过更改系统时间用命令“sudo date -s 07:00:01”,然后就开始打印如下的结果:
Global time is 20101220_06 
Test time is 20101220_07   

Global time is 20101220_07 //注意这一行 
Test time is 20101220_07 
Global time is 20101220_07 
Test time is 20101220_07 
Global time is 20101220_07 
Test time is 20101220_07 
Global time is 20101220_07 
Test time is 20101220_07 
Global time is 20101220_07 
Test time is 20101220_07 
Global time is 20101220_07 
Test time is 20101220_07 
Global time is 20101220_07 
Test time is 20101220_07 
。。。
请问我加粗的那一行中,为什么Global time 就变成“Global time is 20101220_07”了,其他地方我也没有动它啊?

谢谢指教!!!!

|
localtime()返回的是一个指针 所以global time依然指向被改变的时间结构体
你把g_timefields声明为一个结构体而不是结构体指针就好拉

|
int get_cur_time()
{
        time_t timeticks; //
        struct tm *timefields;

        timeticks = time(NULL);

        timefields = localtime(&timeticks);

        return timefields; 
}
这地方的问题!你的test和 g_timefields指向的是glibc的全局变量。
还有这个返回。。。。
你需要使用localtime_r

|
楼主你返回局部变量了,可以把
timefields = localtime(&timeticks);
修改为
g_timefields = localtime(&timeticks);



    
 
 

您可能感兴趣的文章:

  • 如何获取 文件类型?文件更新日期?多谢高手帮忙!
  • 各位高手别嫌分少,帮帮忙!!我怎么才能获取主机名,来着有分!
  • !!!快来帮忙!!!在程序中如何获取当前的系统时间(精确到毫秒ms)???
  • sed n 模式替换中正则表达式获取值问题(sed 高手帮帮忙!!)
  • 没人帮忙吗?我想用JAVA编一个像WINDOW中的画图软件,现在出现了如下问题,请各位老哥老姐帮帮忙
  • 在笔记本上装rh9出现的显示问题,请帮忙
  • 安装Redhat8.0出现问题,请高手帮帮忙,谢谢!
  • linux下安装WU-FTPD 2.6.2出现不明问题,高人帮忙啊
  • 发布Applet出现的错误,帮忙撒
  • linux出现内核错误,请各位前辈帮忙分析
  • adsv1.2 for arm 新建工程出现问题?望大侠帮帮忙
  • 新用linux的GDB, 版本是出现6.3.3.0,出现奇怪问题, 可能是环境设置的问题, 大人帮忙
  • 在Linux下面编译出现以下错误,请帮忙看看是什么原因,多谢了
  • 我在设置sendmail的smtp验证时,出现如下错误,请大家帮忙:
  • 请求帮忙!!我刚刚安装了LINUX,可是奇怪的是X WINDOW显示的画面在右下角出现。
  • JSP中有关点击链接出现小窗口的问题?做过的请帮忙啊!
  • ./configure的时候出现的小问题?进来帮忙解答一下..谢谢
  • 在编译内核时候出现问题,大家来帮忙看看是什么问题?怎么解决?
  • 运行squid出现的奇怪问题,请大家帮忙看一下
  • OpenSolaris 安装过程中出现问题,请帮帮忙,已经忙了一天了,谢谢
  • 光盘安装Redhat9时,安装一半出现的问题??请帮忙!!
  • 访问一个JButton数组时,出现 NullPointerException ,请帮忙 (附程序)
  • Linux下安装MySQL++出现问题。恳请高手帮忙。
  • 帮忙阿~我ubuntu 下的刚装的eclipse运行出现问题,是配置的问题么??
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 努力努力再努力,帮忙帮忙来帮忙!
  • 在servlet中有一个关于单引号输出的问题,请大家帮忙,帮忙,帮帮忙!!
  • 小问题,你一定能够帮忙!——菜鸟请求帮忙!!
  • 帮忙帮忙如何设置变量pathclass
  • 帮帮忙!SCO OpenServer 5.0.5 的root用户口令丢了,怎么找回来啊,帮帮忙!!!!!!
  • 我用smartupload组件遇到问题了,请帮忙!!
  • webmail问题,请高手帮忙!!!谁会使用IMP 3.0????!!!
  • 脚本问题,帮忙
  • 高手帮忙解释
  • 求教求教,shell问题...各位大哥,帮忙下
  • 关于程序移植,请知道的帮忙,分会加的
  • DELL服务器,安装RedHat EAS3.0,装完了,连不上SSH。。。。。哪位大虾帮忙!!急啊 !!!!
  • 关于聊天室的若干疑问!!!请各位大虾帮忙!
  • 有个问题?请帮忙!
  • 请求各位帮忙,关于绘制图像
  • 关于全选的问题大家帮忙看看~
  • 帮忙找个工作。
  • 请帮忙推荐几个下载java电子书的网站,35分献上!
  • 我怎么不能编译servlet?请帮忙!!!谢谢!!!
  • 请问谁有weblogic6.1sp1的crack??大大加分!!请多帮忙!!!


  • 站内导航:


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

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

    浙ICP备11055608号-3