如何知道/更改保险丝readdir功能中的缓冲区大小?

时间:2015-08-15 12:23:26

标签: c fuse

我正在为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>

1 个答案:

答案 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()系统调用的数量将由执行调用的应用程序确定。