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

时间:2009-10-31 02:01:48

标签: c linux mount vfs

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

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

3 个答案:

答案 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添加了新的statfs64fstatfs64系统调用,这些调用使用扩展结构来处理更大的大小。)但是, statfs在Linux上用于确定文件系统类型仍然很有用(假设您可以编写特定于Linux的代码)。

答案 2 :(得分:1)

不推荐使用

statfs(),而是statvfs(),它可以在大文件支持下更好地处理 。众所周知,statfs()对超过无符号长整数的大小做了奇怪的事情。

据我所知(并且记得),statvfs()自Redhat 7.3以来一直存在,就在作为POSIX替代品推出之后。您可能会在(大多数)现代系统上找到它。