我正在为Linux中的FUSE文件系统编写readdir
函数。我的想法是在缓冲区中放置任意数量的目录条目,以便在列出目录时保持低于外部程序的getdents
系统调用数(避免调用每个文件)。
函数的缓冲区参数由FUSE提供,指向filler
类型为fuse_fill_dir_t
的辅助函数,该函数知道如何处理此缓冲区。
问题是我不知道如何获取或更改此缓冲区的大小,并且当缓冲区已满时filler
函数返回 1 。
请注意,我使用偏移来调用filler
函数,使用 0 不是一个选项,因为我不想返回所有目录条目只需一次getdents
电话。
filler(buf, d->d_name, NULL, next_offset);
测试会为缓冲区抛出 102 固定的最大条目数,但我不想依赖“魔法”数字,而且我不知道这个数字的来源。< / p>
答案 0 :(得分:1)
根据getdents()
man page,缓冲区由调用应用程序提供:
<强> getdents()强>
The system call getdents() reads several linux_dirent structures from the directory referred to by the open file descriptor fd into the buffer pointed to by dirp. The argument count specifies the size of that buffer.
因此,getdents()
系统调用的数量将由执行调用的应用程序确定。