Linux有许多api可用于设置系统时间:我们可以使用time()
,gettimeofday()
,clock_gettime()
来获取时间,我们可以使用stime()
,settimeofday()
,clock_settime()
来设置时间。
然而,我注意到其中一些api被标记为"已弃用"。或";obsolete"。我找不到这种指责背后的原因。具体来说:
为什么stime()
被弃用(源)而time()
没有?gettimeofday()
提供比time()
更高的分辨率,但前者而不是后者被宣布"过时"。(源).
这些决定的原因是什么?
这些api已被声明为"已过时";通常的原因是:它们老旧,不安全,不可移植,有未指定/未定义的行为,有棘手的边缘情况,存在更好的替代方案,等等。
Linux中api的弃用通常是根据具体情况进行的;没有一般的规则。
为什么不支持
stime()
…
这是SVr4
的一个非标准函数,没有人使用(在Linux上)。在任何情况下你都应该使用clock_settime
。
…而不是
time()
?
time()
是一个无处不在的超级标准函数,因为它是C语言标准的一部分。它将一直使用到……时间!
gettimeofday()
提供比time()
更高的分辨率,但前者而不是后者被宣布"过时">
gettimeofday()
是POSIX函数,POSIX标准化了现有的实践。过了一段时间(POSIX Issue 7),clock_gettime()
被发明出来,具有更高的分辨率和更强的可移植性。因为存在更好更安全的接口,POSIX注意到gettimeofday()
已经过时了。我认为这个注释对开发人员来说是不言自明的:
应用程序使用
应用程序应该使用clock_gettime()函数而不是过时的gettimeofday()函数。
一般来说,要找出特定API被弃用的原因,需要研究特定的项目历史。源代码存储库提供提交历史,标准,如POSIX或C标准,随"rational",一个单独的文档或包含在文档中,解释决策。
例如,您可以从这个提交中找到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.