代码改变世界

突破Linux文件大小的2G限制

2010-05-15 10:55  shuisheng  阅读(1655)  评论(0)    收藏  举报

正常情况下在32位Linux系统编程,使用fopen对文件进行操作时会遇到2G大小的限制,比如有一个文件有3G,你想移动流指针到2.5G的位置,系统会提示文件太大,不能操作。

解决办法,定义如下宏:

#define _FILE_OFFSET_BITS 64
#define __USE_FILE_OFFSET64
#define __USE_LARGEFIILE64
#define _LARGEFILE64_SOURCE

这样定义后off_set就是8字节数据,共64位了。

64位off_t溢出怎么解决?
我定义off_t lBytes = 1024*1024*1024*100;
然后编译的时候,警告整数溢出(integer overflow),这是因为1024等数字是integer型,编译器在编译的时候不会自动转为off_set型,所以应改为
off_t lBytes = (off_t)1024*(off_t)1024*(off_t)1024*(off_t)100;
这样编译器就不会有这个警告了
打印64位:

printf("%lld\n", lBytes);

 

 

就不会再出问题了


类别:linux & unix 查看评论