linux fopen打开大于2G文件出错的解决方法 (踩了一个大坑)

当在Linux 32位系统中尝试使用fopen打开超过2GB的文件时遇到问题,可以通过定义宏_FILE_OFFSET_BITS为64、修改编译选项或使用fopen64来解决。在makefile或Qt的pro文件中设置相应的编译标志可确保能正确处理大文件。
摘要由CSDN通过智能技术生成

先说点题外话, 最近某模块缩容, 导致单机任务堆积, 超过了2G,  fopen就失败了。 开始怀疑是文件权限问题, 但排查后, 发现不是, 但依然找不到原因, 后来某哥敏锐地发现, 文件的值在2G左右, 于是怀疑这里有问题, 于是上网一查, 果然如此。

        我不写了, 直接转载网上文章描述这个问题, 转载地址:

        http://blog.163.com/qimo601@126/blog/static/158220932013921758707/

 

 

 

 

       因项目从windows移植过来,有些打开文件函数失败。在linux32位机器上用如下办法都可以解决。

最简单的当然是第一种,亲测。

 

      正常32位linux系统打开大于2G的文件会报错,解决办法:

一、定义宏 

//   定义宏,使得可以处理大文件(>4GB)   (凡是用到得地方,都要引入这个宏定义。所以需要单独写在一个.h文件里)
  #undef   _FILE_OFFSET_BITS   
  #define   _FILE_OFFSET_BITS   64   
  #include   <unistd.h>   
  #include   <dirent.h>

 

二、在makefile编译选项里加上-D_FILE_OFFSET_BITS=64 -D_LARGE_FILE

 (Qt可以在pro文件里修改DEFINES += _FILE_OFFSET_BITS=64 _LARGE_FILE,自动会在makefile中生成如上格式的参数)

linux fopen打开大于2G的文件 - 柳北风儿 - 柳北风儿~~~~~~~欲宇仙炅

 

三、使用fopen64函数

 

四、在使用fopen等函数的加上一个参数:

对与open,可以使用O_LARGEFILE参数,

即: fd = open("./bill_test",O_LARGEFILE|O_APPEND|O_RDWR,0666); 

然后就没用问题了,但是fopen没有这个参数,只能按照方法一来解决。

 

 

参考:

1、linux fopen打开大文件

2、LINUX下写大文件—fopen/fprintf,open/write怎么写大文件

3、linux环境下读写超过2G的大文件

4、linux中打开大文件的问题(大于4G)

 

https://blog.csdn.net/stpeace/article/details/65936048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值