deprecating/obsoleting 某些 Linux 时间 API 的原因是什么?

What is the reason for deprecating/obsoleting certain Linux time APIs?

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

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

为什么 stime() 已弃用 (source) but not time()? gettimeofday() offers higher resolution than time(), but the former rather than the latter was declared "obsolete" (source)。

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

这些 API 已被宣布为“过时”,原因通常是:它们陈旧、不安全、不可移植、具有 unspecified/undefined 行为、有棘手的边缘情况、存在更好的替代方案等

Linux 中对 API 的弃用通常视具体情况而定;没有一般规则。


Why is stime() deprecated…

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

…but not time()?

time() 是随处可用的超级标准函数,因为它是 C language standard 的一部分。会用到...时间结束!

gettimeofday() offers higher resolution than time(), but the former rather than the latter was declared "obsolete"

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

APPLICATION USAGE

Applications should use the clock_gettime() function instead of the obsolescent gettimeofday() function.


一般来说,要找出特定 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.