如何用FUSE定制化自己的文件系统 (e.g., mount and unmount)

发布于 2022-09-04 18:13:33 字数 2754 浏览 13 评论 0

I have read several examples about FUSE(Filesystem in Userspace) from

I know I need to write my own callback functions in the fuse_operations.

Question

How to write mount and unmount by using FUSE?
How to customize my file system?


struct fuse_operations {
    int (*getattr) (const char *, struct stat *);
    int (*readlink) (const char *, char *, size_t);
    int (*getdir) (const char *, fuse_dirh_t, fuse_dirfil_t);
    int (*mknod) (const char *, mode_t, dev_t);
    int (*mkdir) (const char *, mode_t);
    int (*unlink) (const char *);
    int (*rmdir) (const char *);
    int (*symlink) (const char *, const char *);
    int (*rename) (const char *, const char *);
    int (*link) (const char *, const char *);
    int (*chmod) (const char *, mode_t);
    int (*chown) (const char *, uid_t, gid_t);
    int (*truncate) (const char *, off_t);
    int (*utime) (const char *, struct utimbuf *);
    int (*open) (const char *, struct fuse_file_info *);
    int (*read) (const char *, char *, size_t, off_t, struct fuse_file_info *);
    int (*write) (const char *, const char *, size_t, off_t,struct fuse_file_info *);
    int (*statfs) (const char *, struct statfs *);
    int (*flush) (const char *, struct fuse_file_info *);
    int (*release) (const char *, struct fuse_file_info *);
    int (*fsync) (const char *, int, struct fuse_file_info *);
    int (*setxattr) (const char *, const char *, const char *, size_t, int);
    int (*getxattr) (const char *, const char *, char *, size_t);
    int (*listxattr) (const char *, char *, size_t);
    int (*removexattr) (const char *, const char *);
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月下伊人醉 2022-09-11 18:13:33

一看这全英文的问题,就不想回答了。英文问题应该去问洋人!

还是简单的说一下,最好的方式就是看fuseexample目录中的例子。

1、首先,你要安装好fuse库,当前版本应该是3了。
2、看struct fuse_operations中的函数指针,实现你需要自定义的那些。比如说你需要在mkdir的时候,同时在新建的目录下创建一个文件,那么你就写一个自定义的mkdir函数,然后在这个函数里面实现你要做的事情。
3、创建一个struct fuse_operations对象,然后将你自定义的函数赋值给对应的成员。
4、调用fuse_main函数,传入第三步创建的对象。fuse_main函数的前两个参数是int argc,char* argv[],第一个参数argc指示第二个参数argv数组中元素的个数。还是看代码吧

struct fuse_operations opts;
opts.mkdir = &my_mkdir;    // 假设你已经实现了my_mkdir

char* v[] = {"myfs","/tmp/myfs"};    // /tmp/myfs假设是你的挂载点
fuse_main(2,v,&opts,NULL);

当对/tmp/myfs目录进行操作的时候,就会调用你自定义的接口。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文