21

为什么statfs()andstatvfs()调用在它们如此相似时都存在?

在什么情况下我会更喜欢其中一种?

4

3 回答 3

19

错误,“历史原因”。

最初 4.4BSD 定义了一个statfs()调用。Linux 后来实现了一个稍微不同的同名调用。Posix 通过定义statvfs().

statfs()是特定于操作系统的

statvfs()是符合 posix 的

由于它们都返回略有不同的结构,因此后来出现的结构无法取代第一个。

一般来说,您应该使用statvfs()Posix 之一。但是,请注意“使用 Posix”建议,因为在某些情况下(例如 pty),BSD(或其他)在实践中更便携。

于 2009-10-31T02:05:13.850 回答
5

如果您只想要文件系统容量和使用信息,其他答案是正确的:首选statvfs,因为它是标准 POSIX 并且可以更好地处理大文件大小。statfs是 BSD 和 Linux 特定的,每个都有不同的结构。(Linux 2.6 添加了新的statfs64fstatfs64系统调用,它们使用扩展结构来处理更大的大小。)但是,statfs在 Linux 上确定文件系统类型仍然很有用(假设您可以编写特定于 Linux 的代码)。

于 2013-01-30T19:08:13.813 回答
1

statfs()不赞成使用statvfs(),它可以更好地处理文件支持。statfs()已知会对超过 unsigned long 值的大小做奇怪的事情。

据我所知(并记得),statvfs()自 Redhat 7.3 以来就一直存在,就在作为 POSIX 替代品引入之后。您可能会在(大多数)现代系统上找到它。

于 2009-10-31T02:08:00.240 回答