正常情况下在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 查看评论