2GB limit on file size when using fwrite in C?

Gabriel picture Gabriel · Apr 8, 2009 · Viewed 28.6k times · Source

I have a short C program that writes into a file until there is no more space on disk:

#include <stdio.h>

int main(void) {
  char c[] = "abcdefghij";
  size_t rez;
  FILE *f = fopen("filldisk.dat", "wb");
  while (1) {
    rez = fwrite(c, 1, sizeof(c), f);
    if (!rez) break;
  }
  fclose(f);
  return 0;
}

When I run the program (in Linux), it stops when the file reaches 2GB.

Is there an internal limitation, due to the FILE structure, or something?

Thanks.

Answer

David Cournapeau picture David Cournapeau · Apr 8, 2009

On a 32 bits system (i.e. the OS is 32 bits), by default, fopen and co are limited to 32 bits size/offset/etc... You need to enable the large file support, or use the *64 bits option:

http://www.gnu.org/software/libc/manual/html_node/Opening-Streams.html#index-fopen64-931

Then your fs needs to support this, but except fat and other primitive fs, all of them support creating files > 2 gb.