UNIX编程.struct timeval如何打印它(C编程)

use*_*514 18 unix timer rusage getrusage

我正在尝试打印timeval类型的值.实际上我可以打印它,但我得到以下警告:

此行有多个标记

  • 格式'%ld'需要类型'long int',但参数2的类型为'struct timeval'

程序编译并打印出值,但我想知道我做错了什么.谢谢.

    printf("%ld.%6ld\n",usage.ru_stime);
    printf("%ld.%6ld\n",usage.ru_utime);
Run Code Online (Sandbox Code Playgroud)

用法类型

typedef struct{
    struct timeval ru_utime; /* user time used */
    struct timeval ru_stime; /* system time used */
    long   ru_maxrss;        /* maximum resident set size */
    long   ru_ixrss;         /* integral shared memory size */
    long   ru_idrss;         /* integral unshared data size */
    long   ru_isrss;         /* integral unshared stack size */
    long   ru_minflt;        /* page reclaims */
    long   ru_majflt;        /* page faults */
    long   ru_nswap;         /* swaps */
    long   ru_inblock;       /* block input operations */
    long   ru_oublock;       /* block output operations */
    long   ru_msgsnd;        /* messages sent */
    long   ru_msgrcv;        /* messages received */
    long   ru_nsignals;      /* signals received */
    long   ru_nvcsw;         /* voluntary context switches */
    long   ru_nivcsw;        /* involuntary context switches */
}rusage;

struct rusage usage;
Run Code Online (Sandbox Code Playgroud)

Mar*_*off 29

在GNU C库struct timeval:

在sys/time.h中声明并具有以下成员:

long int tv_sec
Run Code Online (Sandbox Code Playgroud)

这表示经过时间的整秒数.

long int tv_usec
Run Code Online (Sandbox Code Playgroud)

这是剩余的经过时间(几分之一秒),表示为微秒数.它总是不到一百万.

所以你需要这样做

printf("%ld.%06ld\n", usage.ru_stime.tv_sec, usage.ru_stime.tv_usec);
Run Code Online (Sandbox Code Playgroud)

获得一个"格式良好"的时间戳1.000123.

  • 在我的系统上,struct timeval用"time_t tv_sec"和"suseconds_t tv_usec"声明.我有幸用"%ld"打印这些,但不能保证.在打印之前投入很久可能是最安全的. (2认同)

pax*_*blo 8

因为struct timeval将被宣布为:

struct timeval {
    time_t      tv_sec;
    suseconds_t tv_usec;
}
Run Code Online (Sandbox Code Playgroud)

你需要了解基础领域:

printf ("%ld.%06ld\n", usage.ru_stime.tv_sec, usage.ru_stime.tv_usec);
printf ("%ld.%06ld\n", usage.ru_utime.tv_sec, usage.ru_utime.tv_usec);
Run Code Online (Sandbox Code Playgroud)