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

怎甘沉沦 提交于 2019-12-21 05:16:07

问题


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?


回答1:


  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.



回答2:


Never use off64_t explicitly. Always build your programs with 64 bit file offsets on systems where it's necessary to explicitly specify this. Failure to do so is a major bug which your users will end up hating. No idea why it's not default on modern systems...




回答3:


It oughtn't segfault, but the size of the file won't be reported correctly.



来源:https://stackoverflow.com/questions/3221113/off-t-without-d-file-offset-bits-64-on-a-file-2gb

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!