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