gpt4 book ai didi

c - FUSE lib passthrough.c 示例。它在哪里反射(reflect)了我的/确切的?

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:55 30 4
gpt4 key购买 nike

我是 FUSE、c 和 FSs 的新手,我在搞乱 passthrough FS libfuse 包中给出的示例。任何人都可以提示在代码中命令 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);
}

其他功能只是 libfuse 接口(interface)的实现……之类的。我需要制作我自己的残缺的 FS,我需要修改 passthrough.c 以便安装的 FS 将是一张白纸,我可以利用已实现的功能并管理文件和东西。

最佳答案

尝试阅读示例中任何熔断操作的实现,您将看到它。没有一个地方可以隐藏有关根文件系统镜像的特定细节。

例如,让我们检查getattr fuse operation ,类似于 stat(2)系统调用,并期望返回(通过指针)给定文件的统计结构。

当访问fuse文件系统中的某个文件时,首先调用实现gettattr操作的函数,这使得该操作的实现成为强制性的。

查看the implementation in the example :

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;
}

我们看到这段代码所做的只是用相同的参数调用 lstat(2)

所以当你像这样挂载这个示例文件系统时:

$ ./passthrough /tmp/example

然后尝试在那里列出文件:

$ ls /tmp/example/

fuselib 将使用路径 "/" 调用 xmp_getattr(),因为您正在访问 fuse 文件系统的根目录。然后 xmp_getattr() 中的代码将只调用普通的系统调用来做类似的事情,这样根文件系统就会在 /tmp/example 挂载点中得到镜像。

关于c - FUSE lib passthrough.c 示例。它在哪里反射(reflect)了我的/确切的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47895420/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com