Chinaunix首页 | 论坛 | 博客
  • 博客访问: 522206
  • 博文数量: 81
  • 博客积分: 8020
  • 博客等级: 中将
  • 技术积分: 1085
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-08 10:36
文章分类

全部博文(81)

文章存档

2010年(3)

2009年(25)

2008年(53)

我的朋友

分类: 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"

阅读(1622) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~