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

问题描述 投票:18回答:3

为什么statfs()statvfs()在他们如此相似的时候都会存在?

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

c linux mount vfs
3个回答
18
投票

呃,“历史原因”。

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

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

statvfs()符合posix标准

因为它们都返回略有不同的结构,后来的结构不能取代第一个。

一般来说,你应该使用Posix的statvfs()。但要注意“使用Posix”的建议,因为在某些情况下(例如,pty)BSD(或其他)在实践中更容易携带。


4
投票

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


1
投票

statfs()被弃用以支持statvfs(),它在大文件支持方面做得更好。众所周知,statfs()对超过无符号长度值的大小做了奇怪的事情。

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

© www.soinside.com 2019 - 2024. All rights reserved.