I am making a program that reads disk images in C. I am trying to make something portable, so I do not want to use too many OS-specific libraries. I am aware there are many disk images that are very large files but I am unsure how to support these files.
I have read up on fseek
and it seems to use a long int
which is not guaranteed to support values over 231-1. fsetpos
seems to support a larger value with fpos_t
but an absolute position cannot be specified. I have also though about using several relative seeks with fseek
but am unsure if this is portable.
How can I support portably support large files in C?
There is no portable way.
On Linux there are fseeko()
and ftello()
, pair (need some defines, check ftello()
).
On Windows, I believe you have to use _fseeki64()
and _ftelli64()
#ifdef
is your friend
pread()
works on any POSIX-compliant platform (OS X, Linux, BSD, etc.). It's missing on Windows but there are lots of standard things that Windows gets wrong; this won't be the only thing in your codebase that needs a Windows special case.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With