除了精度差异外,struct timevalstruct timespec之间有什么区别?如果我需要的精度低于µs(例如毫秒),为什么我要使用一个精度?

在我的编译器(ARM的gcc)上:

/* POSIX.1b structure for a time value.  This is like a `struct timeval' but
   has nanoseconds instead of microseconds.  */
struct timespec
  {
    __time_t tv_sec;        /* Seconds.  */
    __syscall_slong_t tv_nsec;  /* Nanoseconds.  */
  };

/* A time value that is accurate to the nearest
   microsecond but also has a range of years.  */
struct timeval
  {
    __time_t tv_sec;        /* Seconds.  */
    __suseconds_t tv_usec;  /* Microseconds.  */
  };

__syscall_slong_t__suseconds_t都定义为“长字”。

最佳答案

我认为这实际上只是API [不兼容]的问题。像 pselect() clock_gettime() 这样的POSIX-y调用使用struct timespec。像 utimes() 这样的各种文件系统调用,以及像 gettimeofday() select() 这样的各种Linux调用,都使用struct timeval。我从一些手册页进行了广泛的概括,我怀疑struct timeval具有BSD传统,而struct timespec是POSIX。

如果您要进行间隔测量,则没有理由不利用clock_gettime()的额外精度-尽管要注意,通常是硬件而不是头文件限制了您的测量精度。为了显示目的,将一百万分之几千分之一几乎不会好或坏。另外,Mac OS X does not support clock_gettime()

但是,如果您要进行大量的文件时间操作,则使用struct timeval等API中使用的utimes()可能更有意义。 struct timeval在Linux,BSD和Mac OS X上也具有一些比较功能,例如timercmp()timersub()(再次参见手册页)。

我将根据您打算使用的API而不是结构本身来做出决定。 (或在必要时使用转换方法编写包装器类。)

关于c - c timeval vs timespec,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31275131/

10-16 20:38