弃用/废弃某些 Linux 时间 API 的原因是什么?

use*_*216 3 c linux posix

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

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

为什么stime()已弃用(来源)但没有time()gettimeofday()提供比 更高的分辨率time(),但前者而不是后者被宣布“过时”(来源)。

这些决定的原因是什么?

Kam*_*Cuk 12

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

\n

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

\n
\n
\n

为什么不stime()推荐\xe2\x80\xa6

\n
\n

这是一个没有人使用的非标准函数SVr4(在 Linux 上)。clock_settime在任何情况下你都应该使用它。

\n
\n

\xe2\x80\xa6 但不是time()

\n
\n

time()是一个随处可用的超级标准函数,因为它是C 语言标准的一部分。它将被使用到...时间结束!

\n
\n

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

\n
\n

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

\n
\n

应用程序使用

\n

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

\n
\n
\n

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

\n

例如,您可以从此提交stime()中了解 glibc 中的弃用信息:

\n
* The obsolete function stime is no longer available to newly linked\n  binaries and it has been removed from <time.h> header.  This function\n  has been deprecated in favor of clock_settime.\n
Run Code Online (Sandbox Code Playgroud)\n