为什么statfs()
andstatvfs()
调用在它们如此相似时都存在?
在什么情况下我会更喜欢其中一种?
错误,“历史原因”。
最初 4.4BSD 定义了一个statfs()
调用。Linux 后来实现了一个稍微不同的同名调用。Posix 通过定义statvfs()
.
statfs()
是特定于操作系统的
statvfs()
是符合 posix 的
由于它们都返回略有不同的结构,因此后来出现的结构无法取代第一个。
一般来说,您应该使用statvfs()
Posix 之一。但是,请注意“使用 Posix”建议,因为在某些情况下(例如 pty),BSD(或其他)在实践中更便携。
如果您只想要文件系统容量和使用信息,其他答案是正确的:首选statvfs
,因为它是标准 POSIX 并且可以更好地处理大文件大小。statfs
是 BSD 和 Linux 特定的,每个都有不同的结构。(Linux 2.6 添加了新的statfs64
和fstatfs64
系统调用,它们使用扩展结构来处理更大的大小。)但是,statfs
在 Linux 上确定文件系统类型仍然很有用(假设您可以编写特定于 Linux 的代码)。
statfs()
不赞成使用statvfs()
,它可以更好地处理大文件支持。statfs()
已知会对超过 unsigned long 值的大小做奇怪的事情。
据我所知(并记得),statvfs()
自 Redhat 7.3 以来就一直存在,就在作为 POSIX 替代品引入之后。您可能会在(大多数)现代系统上找到它。