php读超过2g大文件,linux c 读写超过2G的大文件解决办法

linux默认环境下打开、读、写超过2G的文件会返回错误。

定义如下宏可以突破这个限制,对read/write和fread/fwrite同时有效。

注意它必须定义在所有头文件之前。

#define _FILE_OFFSET_BITS 64

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

 #include a4c26d1e5885305701be709a3d33442f.png

 #include a4c26d1e5885305701be709a3d33442f.png

 #include a4c26d1e5885305701be709a3d33442f.png

 #include a4c26d1e5885305701be709a3d33442f.png

 #include a4c26d1e5885305701be709a3d33442f.png

#include

查了查书,看到了linux的ext2文件大小的限制。根据ext2的结构一共是三级索引,文件最大可达12KB+256KB+64MB+16GB。呵呵,linux操作系统是32位操作系统文件大小只能是4G。呵呵

好像以前的版本均有2G限制

不好,最近我用LINUX DESKTOP/SERVER 3.0版,开发商说已突破此限制。

linux现在没有限制了,6.2的好像有.

转自:

http://macwader.blog.hexun.com/23704425_d.html

如何解决linux下文件大小的限制

在linux下,用fwrite等C

API函数来写文件时,会有一个文件大小的限制,一般是2G。问题是在做mysql数据库备份时发现

的。在网上搜了一下,确实有人碰到跟我一样的问题。解决的方案写的并不是很详细。不过有人贴出一个fseeko的文档说明出来,

里面有很重要的信息就是,其中fseeko函数中的off_t在大部分平台上默认为4字节大小。但是可以通过#define

_FILE_OFFSET_BITS

64来把off_t这个转化为64比特类型的大小。其实也可以在linux下man fseeko来查看。

虽然有这个信息,但是并不知道怎么用,第一反应在我的“头文件”中加入#define _FILE_OFFSET_BITS

64,重新编译一次

,实验无效。突然想到mysqldump这个命令是可以写一个超过2G大小的文件,查看了一下mysqldump的源代码。发现其实应该是在编

译时加入编译选项-D_FILE_OFFSET_BITS=64就可以解决此问题。

实例:

// example.c

#include

int main(int argc, char* argv[])

{

FILE

*fp;

if ((fp =

fopen("test.dat", "w+")) == NULL)

return;

int a =

0;

char

data[1024] = "";

while

(true)

{

fwrite(data, sizeof(data), 1, fp);

a++;

if (a >= 1024*2049)

break;

}

fclose(fp);

}

编译:gcc -g -o example -D_FILE_OFFSET_BITS=64 example.c

问题解决!!!

抄自:http://blog.csdn.net/hzhsan/article/details/9365571

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值