FUSE中的opendir()

时间:2012-07-31 06:49:22

标签: fuse

FUSE 中实施xxx_readdir()时,我使用以下代码:

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

然后,在foler上编译并执行:

./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命令时,为什么这些目标会留在它上面?

1 个答案:

答案 0 :(得分:5)

你打电话:

dp = opendir(path);

开始readdir实施。当您将path relative 称为文件系统的根目录时,而不是系统上的绝对路径。

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

相关问题