在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;
}
Run Code Online (Sandbox Code Playgroud)
然后,在foler上编译并执行:
./hello /tmp/hello/
Run Code Online (Sandbox Code Playgroud)
当我使用ls /tmp/hello/命令时,结果如下:
bin dev home lib64 media opt root sbin sys usr
boot etc lib lost+found mnt proc run srv tmp var
Run Code Online (Sandbox Code Playgroud)
但是,我还没有创建任何文件或目录/tmp/hello/.那么,当我使用ls命令时,为什么这些蠢货会驻留在它上面呢?
你打电话:
dp = opendir(path);
Run Code Online (Sandbox Code Playgroud)
开始readdir实施.当您调用它path是相对于文件系统的根目录时,而不是系统上的绝对路径.
所以在/ tmp/hello /中的值path将是'/',因为文件系统需要知道它们安装位置的细节是没有意义的.那里有一个刻意的抽象,使每个文件系统只关注它存储的东西.
| 归档时间: |
|
| 查看次数: |
2129 次 |
| 最近记录: |