目前我们使用 stafs 来确定我们所在的文件系统卷的信息。
#include <string>
#include <iostream>
#include <sys/mount.h>
#include <sys/param.h>
void statFileSys(const std::string f)
{
struct statfs fileStat;
if(statfs(f.data(),&fileStat) == 0)
{
std::cout << "File type: " << fileStat.f_type <<'\n';
std::cout << "File system name: "<<fileStat.f_fstypename << '\n';
}
else
{
std::cout << "statfs failed !!!"<<std::endl;
}
}
int main()
{
statFileSys("/some/network/path");
statFileSys("/tmp");
return 0;
}
我们依赖于
f_type
需要根据文件系统是HFS+、APFS还是网络文件系统来做决策的值。
然而,我们在三台不同的macOS系统上看到了上述小型独立可复制代码的以下怪异输出。
1]
macOS 10.12 + HFS+
File type: 25
File system name: autofs
File type: 23
File system name: hfs
2]
macOS 10.13 (beta) + HFS+
File type: 24
File system name: autofs
File type: 23
File system name: hfs
3]
macOS 10.13 (beta) + APFS
File type: 25
File system name: autofs
File type: 24
File system name: apfs
对于
2]
,我们得到了网络路径(autofs)的f_type
值为24,而在3]
中,我们得到了APFS的f_type
值为24,这似乎不一致。这就引出了一个问题,
statfs
是否是在macOS上查找文件系统卷信息的正确编程方式?如果不是,那么什么才是正确的方法?
f_type
而不是f_fstypename[]
来进行决策,有什么原因吗? - Thunderwood