Sop*_*our 5 c linux filesystems fuse
我是 FUSE、c 和 FS 的新手,我正在弄乱libfuse 包中给出的直通 FS示例。任何人都可以提示一下代码中命令 FUSE 镜像我的根目录的位置吗?因为我发现两个基本函数 - *xmp_init() 和 main() - 非常简洁。
他们来了:
static void *xmp_init(struct fuse_conn_info *conn,
struct fuse_config *cfg)
{
(void) conn;
cfg->use_ino = 1;
cfg->entry_timeout = 0;
cfg->attr_timeout = 0;
cfg->negative_timeout = 0;
return NULL;
}
int main(int argc, char *argv[])
{
umask(0);
return fuse_main(argc, argv, &xmp_oper, NULL);
}
Run Code Online (Sandbox Code Playgroud)
其他函数只是 libfuse 接口的实现...之类的东西。我需要制作自己的残缺文件系统,我需要修改 passthrough.c,以便安装的文件系统将是一张白纸,我可以利用已实现的功能并管理文件和其他内容。
尝试阅读示例中任何熔断操作的实现,您将会看到它。没有一个地方可以隐藏有关根文件系统镜像的特定细节。
例如,让我们检查getattr熔断操作,它类似于stat(2)系统调用,并且期望返回(通过指针)给定文件的 stat 结构。
当在fuse文件系统中访问某个文件时,首先调用实现gettattr操作的函数,这使得必须执行该操作。
查看示例中的实现:
static int xmp_getattr(const char *path, struct stat *stbuf,
struct fuse_file_info *fi)
{
(void) fi;
int res;
res = lstat(path, stbuf);
if (res == -1)
return -errno;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我们看到这段代码所做的只是lstat(2)使用相同的参数进行调用。
因此,当您像这样挂载此示例文件系统时:
$ ./passthrough /tmp/example
Run Code Online (Sandbox Code Playgroud)
然后尝试在那里列出文件:
$ ls /tmp/example/
Run Code Online (Sandbox Code Playgroud)
fusionlib 将xmp_getattr()使用路径进行调用"/",因为您正在访问 fusion 文件系统的根目录。然后,中的代码xmp_getattr()将仅调用普通的系统调用来执行类似的操作,以便根文件系统在/tmp/example挂载点中看起来是镜像的。
| 归档时间: |
|
| 查看次数: |
2006 次 |
| 最近记录: |