【问题标题】:What is the reason for deprecating/obsoleting certain Linux time APIs?弃用/废弃某些 Linux 时间 API 的原因是什么?
【发布时间】:2021-12-03 12:28:40
【问题描述】:

Linux有很多API可以用来设置系统时间:我们可以使用time(),gettimeofday(),clock_gettime()来获取时间,我们可以使用stime(),settimeofday(),@ 987654331@设置时间。

但是,我注意到其中一些 API 被标记为“已弃用”或“已过时”。我找不到这种弃用背后的原因。具体来说:

为什么不推荐使用 stime() (source) 而不是 time()gettimeofday() 提供比 time() 更高的分辨率,但前者而不是后者被宣布为“过时”(source)。

做出这些决定的原因是什么?

【问题讨论】:

  • Linux 主要 API 基于 the POSIX standard,这些 API 经过多年发展。这些函数直接取自已将它们标记为过时的 POSIX 规范。 The POSIX reference site 可能会解释为什么这些功能已过时。
  • 这个问题在meta讨论

标签: c linux posix


【解决方案1】:

这些 API 被声明为“过时”的原因通常是:它们陈旧、不安全、不可移植、具有未指定/未定义的行为、棘手的边缘情况、存在更好的替代方案等。

Linux 中 API 的弃用通常根据具体情况进行;没有一般规则。


为什么不推荐使用stime()...

这是SVr4 的一个非标准函数,没有人使用(在 Linux 上)。在每种情况下,您都应该使用clock_settime

……但不是time()

time() 是一个随处可用的超标准函数,因为它是C language standard 的一部分。它将一直使用到……时间结束!

gettimeofday() 提供比time() 更高的分辨率,但前者而不是后者被宣布为“过时”

gettimeofday() 是一个 POSIX 函数,POSIX 标准化了现有的做法。一段时间后(POSIX 第 7 期)clock_gettime() 被发明出来,分辨率更高,更便携。因为存在更好、更安全的接口,POSIX 指出 gettimeofday() 已过时。我认为该注释对开发人员来说是不言自明的:

应用用途

应用程序应该使用 clock_gettime() 函数而不是过时的 gettimeofday() 函数。


一般来说,要找出特定 API 被弃用的原因,请研究特定项目历史。源代码存储库提供提交历史记录、标准,如 POSIX 或 C 标准,带有“基本原理”,一个单独的文档或包含在文档中,用于解释决策。

例如,您可以从this commit 找到有关 glibc 中的 stime() 弃用:

* The obsolete function stime is no longer available to newly linked
  binaries and it has been removed from <time.h> header.  This function
  has been deprecated in favor of clock_settime.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 2011-01-20
    • 2020-04-19
    • 2016-08-30
    • 1970-01-01
    相关资源
    最近更新 更多