微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何拦截存储大小查询命令

如何解决如何拦截存储大小查询命令

我正在开发一个使用 libfuse文件系统,需要找到一种方法拦截对存储大小查询调用,即 dudf。 但我一直无法确定如何做到这一点,也无法找到展示这一点的示例。

查看我的文件系统的调试输出,也没有提供太多信息,因为我不确定应该拦截哪个调用

解决方法

对于 df,您可以实现 statfs() 操作,如下所示:

static int do_statfs(const char *path,struct statvfs *st)
{
        int rv; 

        rv = statvfs("/",st);
        st->f_bavail = 15717083;

        return rv; 
}

在上面的示例中,为了简化,我查询了根文件系统,而不是修改可用的块,但是您可以(并且应该)感受到完整的 statvfs 结构以及有关您的文件系统的信息。

现在对于 duma​​n 说:“总结每个 FILE 的磁盘使用情况,递归地用于目录",所以每个文件都会被查询。为此,您需要实现 stat() 操作。

static int do_getattr(const char *path,struct stat *st)
{
    st->st_uid = getuid();
    st->st_gid = getgid();
    st->st_atime = time(NULL);
    st->st_mtime = time(NULL);

    // fill the rest of the stat structure

    return 0;
}

一旦实现,你必须添加它们做 fuse_operations 结构:

static struct fuse_operations operations = {
        .open           = do_open,.getattr        = do_getattr,.readdir        = do_readdir,.read           = do_read,.statfs         = do_statfs,.release        = do_release,};

并将其作为参数传递给 fuse_main()

int main(int argc,char *argv[])
{
        return fuse_main(argc,argv,&operations,NULL);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。