加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c timeval vs timespec

发布时间:2020-12-16 04:51:31 所属栏目:百科 来源:网络整理
导读:除了精度的差异,struct timeval和struct timespec之间有什么区别?如果我需要的精度低于μs(比如毫秒),为什么我会使用一个而不是另一个? 在我的编译器(ARM的gcc)上: /* POSIX.1b structure for a time value. This is like a `struct timeval' but has nan
除了精度的差异,struct timeval和struct 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 [in]兼容性的问题. POSIX-y调用如 pselect()clock_gettime()使用struct timespec.各种文件系统调用如 utimes(),以及一些类似Linux调用,如 gettimeofday()select(),使用struct timeval.从一些手册页大致概括,我怀疑struct timeval有BSD遗留,而struct timespec是POSIX.

如果您正在进行间隔测量,则没有理由不利用clock_gettime()的额外精度 – 尽管要注意它通常是硬件,而不是头文件,这会限制您的测量精度.为显示目的除以一百万不是更好或更差,而不是一千.另外,Mac OS X does not support clock_gettime().

但是如果你正在进行大量的文件时间操作,那么使用像utimes()这样的API中使用的struct timeval可能更有意义. struct timeval在Linux,BSD和Mac OS X上也有一些比较功能,例如: timercmp(),timersub()(再次参见手册页).

我会根据您打算使用的API做出决定,而不是根据结构本身做出决定. (或者,如果需要,可以使用转换方法编写包装类.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读