Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

off_t without -D_FILE_OFFSET_BITS=64 on a file > 2GB

1- I'm wondering, what would be the problem if I try to read a file greater than 2GB in size without compiling my program with the option -D_FILE_OFFSET_BITS=64 using off_t and using the second function on this page? would it segfault?

2- I'm planning to use this implementation with off64_t and

#define _LARGEFILE64_SOURCE 1
#define _FILE_OFFSET_BITS 64

Would there be any problem?

like image 241
Josh Avatar asked Feb 27 '23 16:02

Josh


1 Answers

  1. stat() will fail, and errno set to EOVERFLOW in that case. Here's what the linux man page says

    EOVERFLOW  stat()) path refers to a file whose size cannot be
    represented in the type off_t.  This can occur when an application
    

    compiled on a 32-bit platform without -D_FILE_OFFSET_BITS=64 calls stat() on a file whose size exceeds (2<<31)-1 bits.

  2. If you compile with -D_FILE_OFFSET_BITS=64 , you don't need to use off64_t though. You can just continue to use off_t , it'll become 64 bit, and all the functions dealing with files and file sizes will become 64 bit aware.
like image 152
nos Avatar answered Mar 07 '23 03:03

nos