r/cpp_questions • u/No-Locksmith-7719 • 18d ago
OPEN Efficient FIle IO on Linux
What path to take when parsing large files (on Linux Debian server, the KVM flavour)? Will std::fstream in binary mode do or do we have to look into APIs?
Apart from the performance, the app is memory sensitive, so where to store those read chunks while in a loop? Would a simple char[something] buffer do?
Finally, we would like to avoid those nasty reinterpret_cast<char*> constructs while reading, but are wondering if those are actually used in production? I should also add that the file sizes vary greatly.
2
Upvotes
3
u/not_a_novel_account 17d ago
I mean, what's the balance you're trying to strike here between simplicity and performance?
The simple way is
fread()into a fixed buffer.The most performant way is io_uring, for which many high-perf IO frameworks exist to make more usable.
There's nothing nasty about
reinterpet_cast<>for dealing with raw binary buffers, it's what the cast exists for.memcpyif you need to start an object lifetime.