Как создать файл размером более 2 ГБ в Linux / Unix? - PullRequest
8 голосов
/ 18 февраля 2009

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

Ответы [ 5 ]

11 голосов
/ 18 февраля 2009

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

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

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

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

3 голосов
/ 18 февраля 2009

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

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

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

1 голос
/ 18 февраля 2009

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

#define _FILE_OFFSET_BITS 64
#include <stdio.h>
1 голос
/ 18 февраля 2009

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

...