Linux C中的时间返回值0

时间:2013-08-29 02:45:51

标签: c linux

我开始了解Linux C,但是我遇到了这个让我很困惑的问题 我使用函数times。但返回值等于0 好吧,我犯了错误,我改变了代码: 但与printf没有多大关系。 clock_t在Linux中定义为long.so我将clock_t转换为long 这是我的代码:

#include <sys/times.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
   long clock_times;
   struct tms begintime;
   sleep(5);
   if((clock_times=times(&begintime))==-1)
      perror("get times error");
   else
   {
      printf("%ld\n",(long)begintime.tms_utime);
      printf("%ld\n",(long)begintime.tms_stime);
      printf("%ld\n",(long)begintime.tms_cutime);
      printf("%ld\n",(long)begintime.tms_cstime);
   }
   return 0;
}

输出: 0 0 0 0
也返回0;
我使用gdb进行调试,开始时间的变量也是零。 没有printf函数的亲戚。 请

2 个答案:

答案 0 :(得分:2)

您的代码使用接近无CPU的时间,因此结果是正确的。睡眠暂停程序执行 - 此时发生的所有事情都不是您的执行时间,因此不会计算在内。

添加空循环,您将看到差异。 (当然,禁用编译器优化 - 或者将删除空循环)。

看看'时间'程序输出(时间./a.out) - 打印'实际'时间(我估计是gettimeofday()估计),用户时间(用户空间代码浪费的时间)和系统时间(在系统调用中浪费的时间 - 例如写入文件,打开网络连接等)。

(当然,'浪费'我的意思是'用',但无论如何)

答案 1 :(得分:2)

这并不罕见;该过程根本没有使用足够的CPU时间来测量。进程在sleep()中花费的时间不计入程序的CPU时间,因为times()度量执行用户指令所需的CPU时间(以及其他相关时间)这是进程执行用户/内核代码所花费的时间。

将程序更改为以下使用更多CPU的程序,因此可以进行测量:

#include <sys/times.h>
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
   long clock_times;
   struct tms begintime;
   unsigned i;

   for (i = 0; i < 1000000; i++)
      time(NULL);    // An arbitrary library call

   if((clock_times=times(&begintime))==-1)
      perror("get times error");
   else
   {
      printf("%ld %ld %ld %ld\n",
        (long)begintime.tms_utime,
        (long)begintime.tms_stime,
        (long)begintime.tms_cutime,
        (long)begintime.tms_cstime);
   }
   return 0;
}