Как создать файл размером более 2 ГБ в Linux / Unix?

У меня есть эта домашняя работа, где я должен передать очень большой файл из одного источника на несколько машин, используя алгоритм bittorrent. Первоначально я режу файлы на куски, и я передаю куски всем целям. У целей есть интеллект, чтобы делиться кусками, которые у них есть, с другими целями. Работает отлично. Я хотел передать файл 4GB, поэтому я смолол четыре файла 1GB. Это не ошибка, когда я создал файл 4GB tar, но на другом конце при сборке всех кусков вернуться к исходному файлу он ошибается, говоря, что предел размера файла превышен. Как я могу решить эту проблему ограничения 2GB?

5 ответов


Я могу придумать две возможные причины:

  • нет Поддержка Больших Файлов включено в ядре Linux
  • ваше приложение не компилируется с большой поддержкой файлов (вам может потребоваться передать дополнительные флаги gcc, чтобы сообщить ему использовать 64-разрядные версии определенных функций ввода-вывода файлов. например,gcc -D_FILE_OFFSET_BITS=64)

Это зависит от тип файловой системы. При использовании ext3, у меня нет таких проблем с файлами, которые значительно крупнее.

Если базовый диск FAT, NTFS или CIFS (SMB), вы также должны убедиться, что используете последнюю версию соответствующего драйвера. Есть некоторые старые драйверы, которые имеют ограничения размера файла, как те, которые вы испытываете.


может ли это быть связано с конфигурация ограничения системы ?

$ ulimit -a
vi /etc/security/limits.conf
vivek       hard  fsize  1024000

Если вы не хотите, чтобы какой-либо предел удалить fsize С /etc/security/limits.conf.


Если ваша система поддерживает это, вы можете получить подсказки с: man largefile.


вы должны использовать fseeko и ftello см. fseeko(3) Примечание Вы должны определить #define _FILE_OFFSET_BITS 64

#define _FILE_OFFSET_BITS 64
#include <stdio.h>