1

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

我尝试了值,fstat(dirfd,&stb); stb.st_size但它看起来不必要地太大了?stat::st_size目录的价值是什么?

4

1 回答 1

1

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

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

于 2019-01-05T00:46:03.470 回答