【发布时间】:2010-12-11 19:25:39
【问题描述】:
【问题讨论】:
【问题讨论】:
statfs() 已弃用,取而代之的是 statvfs(),它相当更好地支持大文件。众所周知,statfs() 会对超过 unsigned long 值的大小做奇怪的事情。
据我所知(并记得),statvfs() 从 Redhat 7.3 开始就已经存在,就在被引入作为 POSIX 替代品之后。您可能会在(大多数)现代系统上找到它。
【讨论】:
错误,“历史原因”。
最初 4.4BSD 定义了一个statfs() 调用。 Linux 后来实现了一个稍微不同的同名调用。 Posix 通过定义 statvfs() 在所有 freenix 和 Unix 版本之间对其进行标准化。
statfs() 是特定于操作系统的
statvfs() 符合 posix 标准
由于它们都返回略有不同的结构,因此后来出现的结构无法替代第一个。
一般来说,您应该使用 statvfs(),即 Posix 之一。不过,请注意“使用 Posix”建议,因为在某些情况下(例如 pty),BSD(或其他)在实践中更便携。
【讨论】:
如果您只需要文件系统容量和使用信息,其他答案是正确的:首选statvfs,因为它是标准 POSIX,并且可以更好地处理大文件大小。 statfs 是 BSD 和 Linux 特定的,每个都有不同的结构。 (Linux 2.6 添加了新的statfs64 和fstatfs64 系统调用,它们使用扩展结构来处理更大的大小。)但是,statfs 在 Linux 上仍可用于确定文件系统类型(假设你可以编写特定于 Linux 的代码)。
【讨论】: