如何在 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 文件系统上?的主要内容,如果未能解决你的问题,请参考以下文章