제목 그대로 입니다.
c 에서 어찌 하다보니 파일 크기가 점점 커저서 2GByte 를 넘어서내요..
fopen/fseek/fwrite 등 은 모두 2G 이하에서 정상 작동 하는걸로 알고 있습니다.
2GByte 이상 파일을 핸들링 하려면 어떤걸 봐야 하나요?
fopen64 라는게 있다고 하여 man fopen64 해봐도 아무것도 나오지 않내요..
아니면 제가 똑바로 찾아보질 않은 건가요?
fopen64 이나 fopen 같은걸로 알고 있습니다. fopen64도 그냥 open() with O_LARGEFILE 사용됩니다.
그리고 stdio.h 파일 열어보시면 fopen64 보일거에요.
http://www.mkssoftware.com/docs/man3/fopen.3.asp
Linux rules!!!
http://www.suse.de/~aj/linux_lfs.html
http://en.wikipedia.org/wiki/Large_file_support
2 GB 한계는 unsigned를 쓰시면 아마 해결 가능할 것입니다. 4 GB 한계를 넘기 위해서는 large file support (LFS) 지원이 필요합니다.
요즘 배포판에서는 별다른 설정없이 대용량 파일을 조작할 수 있을겁니다.
아래 샘플코드는 대용량 파일의 MD5값을 구하기 위해 사용했던 코드입니다.
fopen64, fseeko64, ftello64 ... 이정도면 되지 않나요?
unsigned long long file_size=0; void* gen_md5(void* filename) { unsigned char buf[1024]; MD5_CTX ctx; int n; FILE *fp; fp=fopen64((char*)filename, "rb"); if (fp==NULL) error_exit("gen_md5->fopen"); fseeko64(fp, 0l, SEEK_END); file_size=ftello64(fp); rewind(fp); MD5Init(&ctx); while ((n = fread(buf, 1, sizeof(buf), fp)) > 0) { read_size+=sizeof(buf); MD5Update(&ctx, buf, n); } MD5Final(md5sum_device, &ctx); fclose(fp); }
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
fopen64 이나 fopen
fopen64 이나 fopen 같은걸로 알고 있습니다.
fopen64도 그냥 open() with O_LARGEFILE 사용됩니다.
그리고 stdio.h 파일 열어보시면 fopen64 보일거에요.
http://www.mkssoftware.com/docs/man3/fopen.3.asp
Linux rules!!!
Linux rules!!!
LFS
http://www.suse.de/~aj/linux_lfs.html
http://en.wikipedia.org/wiki/Large_file_support
2 GB 한계는 unsigned를 쓰시면 아마 해결 가능할 것입니다. 4 GB 한계를 넘기 위해서는 large file support (LFS) 지원이 필요합니다.
요즘 배포판에서는
요즘 배포판에서는 별다른 설정없이 대용량 파일을 조작할 수 있을겁니다.
아래 샘플코드는 대용량 파일의 MD5값을 구하기 위해 사용했던 코드입니다.
fopen64, fseeko64, ftello64 ... 이정도면 되지 않나요?
댓글 달기