c 에서 2GByte 이상 파일을 핸들링 하기 위한 방법이 궁급합니다.

qprk의 이미지


제목 그대로 입니다.

c 에서 어찌 하다보니 파일 크기가 점점 커저서 2GByte 를 넘어서내요..

fopen/fseek/fwrite 등 은 모두 2G 이하에서 정상 작동 하는걸로 알고 있습니다.

2GByte 이상 파일을 핸들링 하려면 어떤걸 봐야 하나요?

fopen64 라는게 있다고 하여 man fopen64 해봐도 아무것도 나오지 않내요..

아니면 제가 똑바로 찾아보질 않은 건가요?

yeilho의 이미지

fopen64 이나 fopen 같은걸로 알고 있습니다.
fopen64도 그냥 open() with O_LARGEFILE 사용됩니다.

그리고 stdio.h 파일 열어보시면 fopen64 보일거에요.

http://www.mkssoftware.com/docs/man3/fopen.3.asp

Linux rules!!!

Linux rules!!!

Prentice의 이미지

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) 지원이 필요합니다.

mrjh76의 이미지

요즘 배포판에서는 별다른 설정없이 대용량 파일을 조작할 수 있을겁니다.

아래 샘플코드는 대용량 파일의 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);
}

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.