【问题标题】:Difference between statvfs() and statfs() system calls?statvfs() 和 statfs() 系统调用的区别?
【发布时间】:2010-12-11 19:25:39
【问题描述】:

为什么statfs()statvfs() 调用如此相似却同时存在?

在什么情况下我会更喜欢其中一种?

【问题讨论】:

    标签: c linux mount vfs


    【解决方案1】:

    statfs() 已弃用,取而代之的是 statvfs(),它相当更好地支持大文件。众所周知,statfs() 会对超过 unsigned long 值的大小做奇怪的事情。

    据我所知(并记得),statvfs() 从 Redhat 7.3 开始就已经存在,就在被引入作为 POSIX 替代品之后。您可能会在(大多数)现代系统上找到它。

    【讨论】:

    • 我不明白如何弃用系统调用 (statfs) 以支持库调用 (statvfs)。它们有不同的用途,在应用程序代码中使用 statfs 可能会被弃用,但我认为这是值得的。目前 glibc-2.25 似乎调用了 statfs。
    【解决方案2】:

    错误,“历史原因”。

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

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

    statvfs() 符合 posix 标准

    由于它们都返回略有不同的结构,因此后来出现的结构无法替代第一个。

    一般来说,您应该使用 statvfs(),即 Posix 之一。不过,请注意“使用 Posix”建议,因为在某些情况下(例如 pty),BSD(或其他)在实践中更便携。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-21
        • 2011-02-14
        • 2010-09-23
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-04
        • 1970-01-01
        相关资源
        最近更新 更多