리눅스에서 2G 이상 파일 다루기 핵심은 결국 off_t 데이터형 크기에 달려 있다. (C++ std::iostream에서는 streamoff 객체 크기)
일반적인 파일 처리라면 모르겠지만 서버 로그 등을 제어한다면 컴파일 옵션으로 64bit 크기 off_t 데이터형을 쓰는 것이 바람직하다.
streamoff 타입
(사실 OS와 무관하다. 정확히는 컴파일러와 해당 라이브러리와 관계가 있다고 해야겠다.)
#include <iostream>위 파일이 off.cpp라면...
#include <cstdio>
using namespace std;
int
main(int,char**)
{
cout << sizeof(off_t) << endl;
cout << sizeof(streamoff) << endl;
return 0;
}
$ g++ -o off off.cpp
$ ./off
- Linux 2.6 32bit: 4, 8
- FreeBSD 32bit: 8, 4
- SunOS 5.8 32bit: 4, 4
일반적인 파일 처리라면 모르겠지만 서버 로그 등을 제어한다면 컴파일 옵션으로 64bit 크기 off_t 데이터형을 쓰는 것이 바람직하다.
streamoff 타입
(사실 OS와 무관하다. 정확히는 컴파일러와 해당 라이브러리와 관계가 있다고 해야겠다.)
- Linux 2.6: int64_t
- FreeBSD 5.2: long
- SunOS 5.8: ?
댓글
댓글 쓰기