문제

나는 결정적인 대답을 찾으려고 노력하고 있고 할 수 없으므로 누군가가 알고 있기를 바라고 있습니다.

Linux (32 비트 OS)에서 GCC 4.X를 사용하여 C ++ 앱을 개발하고 있습니다. 이 앱은 크기가 2GB> 2GB를 읽을 수 있어야합니다.

iostream stuff vs. 파일 포인터를 사용하고 싶지만 큰 파일 #defines (_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/등.

업데이트

필요하지 않은 한, 2GB 제한에 대해 걱정할 필요가 없습니다. fseek 또는 ftell (당신은 방금 스트림에서 읽거나 씁니다.)

다른 팁

GCC를 사용하는 경우 __gnu_cxx :: stdio_filebuf라는 GCC 확장을 활용할 수 있습니다. 파일 설명자.

다음 두 가지를 정의해야합니다.

_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;

}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top