gpt4 book ai didi

fuse - FUSE 中的 opendir()

转载 作者:行者123 更新时间:2023-12-05 01:23:45 27 4
gpt4 key购买 nike

在执行 xxx_readdir() fuse ,我使用以下代码:

static int hello_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
off_t offset, struct fuse_file_info *fi)
{
DIR *dp;
struct dirent *de;

(void) offset;
(void) fi;

dp = opendir(path);
if (dp == NULL)
return -errno;

while ((de = readdir(dp)) != NULL) {
struct stat st;
memset(&st, 0, sizeof(st));
st.st_ino = de->d_ino;
st.st_mode = de->d_type << 12;
if (filler(buf, de->d_name, &st, 0))
break;
}

closedir(dp);
return 0;
}

然后,在文件夹上编译并执行:
./hello /tmp/hello/

当我使用 ls /tmp/hello/命令,结果如下:
bin   dev  home  lib64       media  opt   root  sbin  sys  usr
boot etc lib lost+found mnt proc run srv tmp var

但是,我没有在 /tmp/hello/ 中创建任何文件或目录。 .那么,当我使用 ls 时,为什么这些目录存在于它上面?命令?

最佳答案

你打电话:

dp = opendir(path);

开始您的 readdir执行。当你调用 path相对于文件系统的根目录,而不是系统上的绝对路径。

所以在/tmp/hello/中 path 的值将是“/”,因为文件系统需要知道它们安装位置的详细信息是没有意义的。那里有一个刻意的抽象,使得每个文件系统只关心它存储的东西。

关于fuse - FUSE 中的 opendir(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11734619/

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