C에서 대용량 파일을 열려면?

elanion의 이미지

C에서 fopen으로 1기가 정도 되는 파일을 열지 못하는데요.
어떻게 하면 열 수 있을까요?

익명 사용자의 이미지

대용량 파일 문제인 것이 확실한지 확인해보셨나요?

32bit 시스템에서 2^31 바이트까지는 정상적으로 돼야 한다고 알고 있습니다.

http://www.suse.de/~aj/linux_lfs.html
http://www.ece.utexas.edu/~luo/linux_lfs.html

elanion의 이미지

2기가 이상의 파일은 어떻게 여는 것인가요?

diylinux의 이미지

fopen64를 이용하세요..

그러면 2기가 이상의 파일이라도 handling 하실 수 있을 겁니다.

FILE * fopen( const char *path, const char *mode )
{

    retrun fopen64( path, mode );
}

위 코드를 library로 만드신 후에 LD_PRELOAD를 이용해서
읽으시면 기존 fopen으로 되어 있는 코드도 문제 없이 사용하실 수 있으실 겁니다.

elanion wrote:
2기가 이상의 파일은 어떻게 여는 것인가요?
pynoos의 이미지

http://www.ece.utexas.edu/~luo/linux_lfs.html
를 참고하시고,

일반 fopen을 사용하시더라도

-D_FILE_OFFSET_BITS=64

옵션을 gcc에 넘겨 주시면 fopen 이 fopen64로 바뀌어 들어갑니다.

또, fopen64를 명시적으로 사용하시려면 header에 fopen64를 추가하여야하므로

-D_LARGEFILE64_SOURCE=1

을 gcc에 넘겨주시면 됩니다.