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

本文介绍了解决32位Linux系统中大文件(超过2GB)操作限制的方法,通过定义特定宏使off_t类型扩展至64位,并提供避免整数溢出的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://www.cnblogs.com/ssliao/archive/2010/05/15/1819448.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值