如何在 C 代码中检查目录是不是在 NFS 文件系统上?

Posted

技术标签:

【中文标题】如何在 C 代码中检查目录是不是在 NFS 文件系统上?【英文标题】:How to check in C code whether a directory is on NFS file system?如何在 C 代码中检查目录是否在 NFS 文件系统上? 【发布时间】:2012-07-28 08:22:47 【问题描述】:

在我的 C/C++ 程序中,我想检查用户指定的数据目录是否驻留在 NFS 文件系统上。需要进行检查,因为远程 NFS 目录的数据处理延迟/带宽更差。如果数据目录是 NFS,我想向用户发出警告。

我该怎么做?我认为有 stat() 调用应该能够帮助我,但细节尚不清楚。

我在 Linux 上。

【问题讨论】:

实际性能可能会被操作系统通过缓存很好地隐藏,因此您必须执行广泛测试以确定实际 性能... 【参考方案1】:

您应该使用statfs(2) 并检查f_type

#include <sys/statfs.h>

struct statfs foo;
if (statfs ("/foo/bar", &foo)) 
    /* error handling */


if (foo.f_type == NFS_SUPER_MAGIC) 
    /* nfs warning */

我同意 Basile 的观点。

【讨论】:

【参考方案2】:

您可以使用statfs 系统调用来获取有关给定路径的文件系统的信息(该文件系统中的某个文件)。

我不确定警告用户是否有用。内核正在做一些文件缓存,一些远程文件系统可能比一些本地文件系统更快(例如,在慢速 USB 记忆棒上或在 CDROM 上)。

【讨论】:

【参考方案3】:

您要查找的系统调用是statfs。给定任何路径,它将为您提供有关该路径所在文件系统的信息,包括它正在使用的文件系统。

【讨论】:

以上是关于如何在 C 代码中检查目录是不是在 NFS 文件系统上?的主要内容,如果未能解决你的问题,请参考以下文章

NFS 文件在 C 代码中打开

检查 NFS 目录是不是在失败时挂载而没有大挂起

检查 NFS 共享是不是安装在 python 脚本中

当 NFS 挂载失败时,bash 检查目录是不是存在挂起

如何判断(在 sh 中)一个目录是不是挂载在 NFS 上

Linux网络服务------NFS共享储存服务