statvfs()和statfs()系统调用之间的区别?

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

在什么情况下我会比另一个更喜欢?

Solutions Collecting From Web of "statvfs()和statfs()系统调用之间的区别?"

歇斯底里的葡萄干


错误,“历史原因”。

本来4.4BSD定义了一个statfs()调用。 Linux后来用相同的名字实现了稍微不同的调用。 Posix通过定义statvfs()在所有freenix和Unix版本之间对其进行了标准化。

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

statvfs()是符合posix的

由于他们都返回稍微不同的结构,后来的人来不能取代第一。

一般来说,你应该使用statvfs() ,Posix之一。 但是,要小心“使用Posix”的建议,因为在某些情况下(例如,pty),BSD(或其他)在实践中更加便于携带。

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

statfs()被弃用,以支持statvfs(),这对于大文件支持的处理好得多。 已知statfs()对于超过无符号长整型值的大小做了一些奇怪的事情。

据我所知(还记得),从Redhat 7.3开始,statvfs()就被引入POSIX替代品。 你可能会在(大部分)现代系统上找到它。