останавливается, когда размер файла достигает 2 ГБ.
Есть ли внутреннее ограничение из-за
в структуру ФАЙЛ, или что-то?
Это происходит из-за libc (стандартной библиотеки C), которая по умолчанию в системе x86 (IA-32) Linux представляет собой 32-битные функции, предоставляемые glibc (GNU's C Library). Таким образом, по умолчанию размер файлового потока основан на 32-битном коде - 2 ^ (32-1).
Для использования Поддержка больших файлов см. Веб-страницу.
#define _FILE_OFFSET_BITS 64
/* or more commonly add -D_FILE_OFFSET_BITS=64 to CFLAGS */
#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 < sizeof(c) ) { break; }
}
fclose(f);
return 0;
}
Примечание. Большинство систем ожидают, что fopen (и off_t) будут основаны на ограничении размера файла 2 ^ 31. Замена их на off64_t
и fopen64
делает это явным, и, в зависимости от использования, может быть лучшим способом. , но в целом не рекомендуется, поскольку они нестандартны.