Search code examples
cfilestandardsstandard-libraryseek

Can I seek a position beyond 2GB in C using the standard library?


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?


Solution

  • 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