c -弃用/废弃某些Linux时api的原因是什么?



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.

最新更新