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
接口为您执行适当的缓冲。
在Linux上,是否可以获取getdents64
所需的缓冲区大小,一次性获取所有条目(假设获取大小后不对目录进行修改)?
我尝试了 fstat(dirfd,&stb); stb.st_size
的值,但它看起来太大了? stat::st_size
对目录的价值是多少?
据我所知,不,没有办法做到这一点,尤其是不能以适用于任意文件系统的方式。目录的表示由底层文件系统定义,st_size
似乎也是如此。当然,没有办法为 FUSE 或 9p 或其他 remote/virtual 文件系统获得正确的值。
你为什么要这样做?我认为这没有用。一旦每次调用超过几 kB,系统调用的开销将由实际完成的工作决定。如果你真的关心你可以用一个函数包装 getdents64
系统调用,这个函数会不断调整缓冲区的大小并调用它直到到达 EOF。或者您可以只使用便携式 opendir
/readdir
接口为您执行适当的缓冲。