Предел на 2 ГБ на размер файла при использовании fwrite в C?

Трудно точно сказать, что происходит, но я предполагаю, что вы объединяете строку в BASE_URL с "upload", поэтому вы пытаетесь отправить сообщение в http://localhost:5000upload, а не в http://localhost:5000/upload.

Попробуйте добавить косую черту в BASE_URL и посмотрите, решит ли это вашу проблему.

Тем не менее, я не уверен, почему ОС будет иметь значение.

21
задан Gabriel 4 September 2013 в 15:37
поделиться

2 ответа

В 32-битной системе (т. Е. ОС 32-битная), по умолчанию, fopen и co ограничены 32 размер битов / смещение / и т. д. ... Вам необходимо включить поддержку больших файлов или использовать параметр * 64 бита:

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

Тогда ваш fs должен поддерживать это, но, кроме fat и других примитивных fs, все они поддерживают создание файлов> 2 ГБ.

28
ответ дан 29 November 2019 в 20:39
поделиться

он останавливается, когда размер файла достигает 2 ГБ.

Существуют ли внутренние ограничения из-за в структуру FILE или что-то в этом роде?

Это происходит из-за libc (стандартной библиотеки C), которая по умолчанию в системе Linux x86 (IA-32) представляет собой 32-разрядные функции, предоставляемые glibc (библиотека C GNU) , Таким образом, по умолчанию размер потока файлов основан на 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 делает это явным, и, в зависимости от использования, может быть лучшим способом. но в целом не рекомендуется, так как они нестандартные.

12
ответ дан 29 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: