如何以编程方式确定文件是不是位于 Linux 和/或 macOS 的网络文件系统(NFS 或 SMB)上?

Posted

技术标签:

【中文标题】如何以编程方式确定文件是不是位于 Linux 和/或 macOS 的网络文件系统(NFS 或 SMB)上?【英文标题】:How can I determine, programatically, if a file is located on a network file system (NFS or SMB) in Linux and/or macOS?如何以编程方式确定文件是否位于 Linux 和/或 macOS 的网络文件系统(NFS 或 SMB)上? 【发布时间】:2020-04-24 10:58:03 【问题描述】:

我正在编写一个 I/O 测试实用程序,作为其中的一部分,我希望能够确定特定文件是在本地文件系统上还是在 NFS 或 SMB 等网络文件系统上。是否有任何操作系统调用或其他技术可以提供此信息?我一直在寻找,但到目前为止我还没有找到任何东西。

【问题讨论】:

没有便携的方法可以做到这一点。在 Linux 上,您调用 statfs(2) 并检查 f_type 【参考方案1】:

所以是的,statfs()(也许还有 stavfs())似乎是要走的路。事实证明,在 macOS 上 statfs() 比 Linux 上的 statfs() 或 statvfs() 更有用。幸运的是 macOS 对我来说更重要。 f_type 字段(两个平台)和 f_fstypename、f_mntonname 和 f_mntfromname 字段(仅限 macOS)是您需要的。

【讨论】:

以上是关于如何以编程方式确定文件是不是位于 Linux 和/或 macOS 的网络文件系统(NFS 或 SMB)上?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式确定 Windows 任务栏是不是隐藏?

以编程方式确定最大文件名长度

有没有办法以编程方式确定字体文件是不是具有特定的 Unicode 字形?

asp.net 成员资格 - 如何以编程方式确定用户是不是在角色中

以编程方式确定 Excel 文件 (.xls) 是不是包含宏

如何以编程方式确定 iPhone 的密码是不是已更改或删除?