linux fopen打开大于2G文件出错的解决方法 (踩了一个大坑)
先说点题外话, 最近某模块缩容, 导致单机任务堆积, 超过了2G, fopen就失败了。 开始怀疑是文件权限问题, 但排查后, 发现不是, 但依然找不到原因, 后来某哥敏锐地发现, 文件的值在2G左右, 于是怀疑这里有问题, 于是上网一查, 果然如此。
我不写了, 直接转载网上文章描述这个问题, 转载地址:
http://blog.163.com/qimo601@126/blog/static/158220932013921758707/
正常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中生成如上格式的参数)

四、在使用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)
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: 二级for循环的外层循环忘记退出引起的bug
- 下一篇: php中for循环中变量没有清空导致的bug