Насколько я знаю, нет, нет способа сделать это, особенно не таким образом, который работает для произвольных файловых систем. Представление каталогов определяется базовой файловой системой, и, похоже, то же самое верно для st_size
. Конечно, нет никакого способа получить правильное значение для FUSE или 9p или других удаленных / виртуальных файловых систем.
Почему ты хочешь это сделать? Я не думаю, что это полезно. Как только вы превысите несколько килобайт за вызов, над системными вызовами будут преобладать фактически выполненная работа. Если вам действительно важно, вы можете обернуть системный вызов getdents64
функцией, которая продолжает изменять размер буфера и вызывать его, пока не будет достигнут EOF. Или вы можете просто использовать переносные интерфейсы opendir
/ readdir
, которые выполняют соответствующую буферизацию для вас.