呃,“历史原因”。
最初4.4BSD定义了一个statfs()
调用。 Linux后来实现了一个名称略有不同的调用。 Posix通过定义statvfs()
在所有freenix和Unix版本之间进行标准化。
statfs()
是特定于操作系统的
statvfs()
符合posix标准
因为它们都返回略有不同的结构,后来的结构不能取代第一个。
一般来说,你应该使用Posix的statvfs()
。但要注意“使用Posix”的建议,因为在某些情况下(例如,pty)BSD(或其他)在实践中更容易携带。
如果您只想要文件系统容量和使用信息,其他答案都是正确的:更喜欢statvfs
,因为它是标准POSIX并且可以更好地处理大文件大小。 statfs
是BSD和Linux特有的,每个都有不同的结构。 (Linux 2.6添加了新的statfs64
和fstatfs64
系统调用,它们使用扩展结构来处理更大的大小。)但是,statfs
在Linux上仍然可用于确定文件系统类型(假设您可以编写特定于Linux的代码)。
statfs()
被弃用以支持statvfs()
,它在大文件支持方面做得更好。众所周知,statfs()
对超过无符号长度值的大小做了奇怪的事情。
据我所知(并且还记得),statvfs()
自Redhat 7.3以来就已经存在,就在作为POSIX替代品推出之后。您可能会在(大多数)现代系统上找到它。