【问题标题】:Buffer size for getdents64 to finish in one gogetdents64 一次完成的缓冲区大小
【发布时间】:2019-05-31 13:13:12
【问题描述】:

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

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

【问题讨论】:

  • 您是否在一个已删除大量成员的目录上调用fstat(dirfd,&stb);
  • @AndrewHenle 它在​​ /、/tmp、/etc/、/home 等一堆目录上尝试过,总之,是的。

标签: c linux directory system-calls


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2022-11-20
    • 1970-01-01
    • 2020-09-05
    • 2014-06-10
    • 2015-06-05
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多