iostream的和大文件支持
-
20-08-2019 - |
题
我试图找到一个明确的答案并不能,所以我希望有人可能知道。
我正在开发使用在Linux(32位OS)GCC 4.x的一个C ++应用程序。此应用需要能够在尺寸上读取文件> 2GB。
我真的想使用的iostream的东西主场迎战文件指针,但我找不到,如果较大的文件#定义(_LARGEFILE_SOURCE,_LARGEFILE64_SOURCE,_FILE_OFFSET_BITS = 64)对iostream的标题任何影响。
我编译一个32位的系统上。任何指针将是有益的。
解决方案
这已经决定了你的时候libstdc++
编译,通常取决于是否_GLIBCXX_USE_LFS
在c++config.h
定义。
如果有疑问,通过您的可执行文件(或libstdc++.so
,如果动态链接反对)通过readelf -r
(或通过strings
),看看是否您的二进制/ libstdc++
针对fopen
/ fseek
/等相连。或fopen64
/ fseek64
/等
<强>更新强>
您不必,只要你不需要/企图fseek
或ftell
(你只是读取或写入流中。)
其他提示
如果使用的是GCC,可以采取一个GCC扩展名为__gnu_cxx :: stdio_filebuf,它关系的的iostream到一个标准的C FILE 描述符。
的优点您需要定义以下两件事情:
_LARGEFILE_SOURCE
_FILE_OFFSET_BITS = 64
例如:
#include <cstdio>
#include <fstream>
#include <ext/stdio_filebuf.h>
int main()
{
std::ofstream outstream;
FILE* outfile;
outfile = fopen("bigfile", "w");
__gnu_cxx::stdio_filebuf<char> fdbuf(outfile, std::ios::out |
std::ios::binary);
outstream.std::ios::rdbuf(&fdbuf);
for(double i = 0; i <= 786432000000.0; i++) {
outstream << "some data";
fclose(outfile);
return 0;
}
不隶属于 StackOverflow