分类: C/C++
2008-03-26 14:33:34
这是由于在32位系统中,内核虚拟文件系统(VFS)的文件长度(inode->i_size)起初被定义成32位符号数(off_t)造成。
在Linux-2.4中,i_size已改为64位符号数类型(loff_t),这样最大文件长度就远远超越了2G的限制,不过应用程序必须使用一组新的
系统调用(_llseek、stat64、fstat64等)来操作大文件,传统的系统调用仍然将文件尺寸限制在2G范围内。
最大文件长度还与实际的文件系统有关,对于ext2文件系统来说,1k块长时的最大文件长度约为16G,2k块长约为256G,4k块长为4100G,8K块长约为65568G。
解决方法:
修改gcc 的大文件支持编译参数
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
比如可以在 gcc 编译之前设置 CFLAGS 环境变量
export CFLAGS="-O2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"