getdents64 一次完成的缓冲区大小

Buffer size for getdents64 to finish in one go

在Linux上,是否可以获取getdents64所需的缓冲区大小,一次性获取所有条目(假设获取大小后不对目录进行修改)?

我尝试了 fstat(dirfd,&stb); stb.st_size 的值,但它看起来太大了? stat::st_size 对目录的价值是多少?

据我所知,不,没有办法做到这一点,尤其是不能以适用于任意文件系统的方式。目录的表示由底层文件系统定义,st_size 似乎也是如此。当然,没有办法为 FUSE 或 9p 或其他 remote/virtual 文件系统获得正确的值。

你为什么要这样做?我认为这没有用。一旦每次调用超过几 kB,系统调用的开销将由实际完成的工作决定。如果你真的关心你可以用一个函数包装 getdents64 系统调用,这个函数会不断调整缓冲区的大小并调用它直到到达 EOF。或者您可以只使用便携式 opendir/readdir 接口为您执行适当的缓冲。