我正在为Linux中的FUSE文件系统编写readdir函数。我的想法是在缓冲区中放置任意数量的目录条目,在列出目录(避免对每个文件进行调用)时,将外部程序中的getdents系统数量保持在较低的水平。
FUSE提供函数的缓冲区参数,以及指向filler助手函数(类型为fuse_fill_dir_t )的指针,该函数知道如何处理该缓冲区。
问题是,我不知道如何获取或更改此缓冲区的大小,当缓冲区已满时,filler函数将返回1。
注意,我使用一个偏移量来调用filler函数,使用不是一个选项,因为我不想只返回一个getdents调用中的所有目录条目。
filler(buf, d->d_name, NULL, next_offset);测试会为缓冲区抛出一个102固定的最大条目数,但我不想依赖“神奇”数字,我也不知道这个数字来自哪里。
发布于 2015-08-15 15:14:04
根据getdents() 手册页,缓冲区由调用应用程序提供:
getdents() 系统调用buffer ()将打开的文件描述符fd所引用的目录中的几个linux_dirent结构读取到dirp所指向的缓冲区中。参数计数指定该缓冲区的大小。
因此,getdents()系统的数量将由执行调用的应用程序决定。
https://stackoverflow.com/questions/32024674
复制相似问题