我正在尝试制作一个基于扩展名(.png,.c,...)组织文件的FUSE。我想在FUSE的根目录中显示一组文件夹,每个文件夹代表一个文件扩展名。当某人cd
进入该文件夹时,它应显示具有该扩展名的所有文件(用户将指定安装时要组织的目录)。例如,输出应该是这样的:
mount/$ ls
+c +cpp +png +py
mount/$ cd +c
mount/+c/$ ls
hello.c xyz.c
我使用+
替换扩展程序的.
。
我正在使用set实现并扫描所需目录及其子目录以查找所有文件扩展名,然后在readdir中显示该组的内容。
int my_readdir(const char* path, void* buffer, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi)
{
filler(buffer,".",NULL,0);
filler(buffer,"..",NULL,0);
if(strcmp("/",path)==0)
{
int i;
for(i=0;i<ext_set.length;i++)
{
filler(buffer,ext_set.get(i),NULL,0);
}
}
}
我得到如上所示的输出,但是它们没有列为目录。
cd +c
抛出+c: Not a directory
(显然不是这样)。
如何将它们作为虚拟目录?