LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1156|回复: 6

如何写大文件(>2GB,RHEL3)?

[复制链接]
发表于 2006-8-12 22:05:37 | 显示全部楼层 |阅读模式
我在RHEL3下,用C++语言写的程序,向一个文件中写6GB的数据,运行到文件大小为2GB时就发生文件大小超出最大限制的错误。但是同样的程序在Ubuntu6.06下编译运行没有问题。哪位高手知道怎样才能在REHEL3下写大文件?

我参与试验的RHEL3和Ubuntu6.06均为Ext3文件系统,将Ubuntu下生成的6GB大小的文件拷贝到RHEL3下没有问题,说明文件大小的限制并不是文件系统的问题。是不是编译器的问题?Ubuntu下用的是G++4而RHEL3下用的是g++3.2.3,有没有什么设置可以让RHEL3下也可以写大文件。

PS:RHEL3下ulimit -f的输出为unlimited。


  1. #include<iostream>
  2. #include <fstream>

  3. using namespace std;

  4. const unsigned int BUF_SIZE = (1<<28);

  5. int main()
  6. {
  7.         float *ptr;
  8.         ptr = new float[BUF_SIZE];
  9.         ofstream ofile("data.dat", ios_base::binary);
  10.         if(!ofile.is_open()){
  11.                 cerr<<"Error to write file!"<<endl;
  12.                 return 1;               
  13.         }
  14.         for(int i;i<6;i++){
  15.                 ofile.write(reinterpret_cast<char *>(ptr),
  16.                             sizeof(float)*BUF_SIZE);
  17.                 cout<<i<<" of 5"<<endl;               
  18.         }
  19.         ofile.close();       
  20.         delete []ptr;
  21.         return 0;
  22. }

复制代码
发表于 2006-8-14 15:03:43 | 显示全部楼层
确实好大啊,,,,,,

呵呵,手痒,洒点水,表介意哈.....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-14 16:51:26 | 显示全部楼层
呵呵,我还以为有人为我解决这个问题了呢。我现在编写的程序是对一些遥感数据进行的处理,数据量非常大,但是机子又都是32位的,如果能写很大很大的文件的话对我的编程来讲会减少很多工作量。
回复 支持 反对

使用道具 举报

发表于 2006-8-15 15:19:42 | 显示全部楼层
编译的时候加入以下参数就可以了
-D_LARGEFILE64_SOURCE  -D_LARGEFILE_SOURCE
回复 支持 反对

使用道具 举报

发表于 2006-8-15 18:19:24 | 显示全部楼层
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-16 00:28:23 | 显示全部楼层
4楼的方法已经试过了没有用,5楼的方法还没有试。谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-8-16 15:57:29 | 显示全部楼层
问题已经解决,多谢各位,关键是这个宏定义:
  1. -D_FILE_OFFSET_BITS=64
复制代码
只有这一个就可以,其他几个都可以不用,我看了一下stdio.h和features.h的源代码,如果定义了这个宏的话其他几个宏都可以自动定义。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表