C++检测文件系统是否为ZFS

通过C++代码判断所在目录的文件系统格式是否为ZFS
这里主要是要获取到通过statfs来获取文件系统的信息。

在Ubuntu下(16.04和14.04)下,都没有定义宏 ZFS_SUPER_MAGIC, 所以需要自己对其进行定义。如果判断的是其他文件系统,也可以通过这种方法进行判断。

#include <iostream>
#include <string>
#include <sys/vfs.h>
#include <linux/magic.h>

#ifndef ZFS_SUPER_MAGIC
#define ZFS_SUPER_MAGIC   0x2FC12FC1
#endif

using namespace std;

int main(void)
{
    const string path = "/mnt/zfs_global_pool/d5ab86068bd711e78000b4b52fd9615f";

    struct statfs fs_info;

    if (statfs(path.c_str(), &fs_info) == -1) {
        cerr << "Cannot get " << path << " stat info" << endl;
        return -1;
    }

    if (fs_info.f_type != ZFS_SUPER_MAGIC)
        cout << path << " is not ZFS" << endl;
    else
        cout << path << " is ZFS" << endl;

    return 0;
}

// vim: set et ts=4 sts=4 sw=4: