8

我有这个家庭作业,我必须使用 bittorrent 算法将一个非常大的文件从一个源传输到多台机器。最初,我将文件切割成块,然后将块传输到所有目标。目标具有与其他目标共享其拥有的块的智能。它工作正常。我想传输一个 4GB 的文件,所以我压缩了四个 1GB 的文件。当我创建 4GB tar 文件时它没有出错,但在另一端将所有块组装回原始文件时出错,说超出了文件大小限制。我该如何解决这个 2GB 限制问题?

4

5 回答 5

11

我可以想到两个可能的原因:

  • 您的 Linux 内核中没有启用大文件支持
  • 您的应用程序没有编译支持大文件(您可能需要传递 gcc 额外标志来告诉它使用某些文件 I/O 函数的 64 位版本。例如gcc -D_FILE_OFFSET_BITS=64
于 2009-02-18T08:33:28.730 回答
4

这取决于文件系统类型。使用 ext3 时,我对大得多的文件没有这样的问题。

如果底层磁盘是 FAT、NTFS 或 CIFS (SMB),您还必须确保使用最新版本的相应驱动程序。有一些较旧的驱动程序具有文件大小限制,就像您遇到的那样。

于 2009-02-18T08:27:22.567 回答
3

这可能与系统限制配置有关吗?

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

如果您不希望fsize/etc/security/limits.conf.

于 2009-02-18T08:27:45.233 回答
1

如果您的系统支持它,您可以通过以下方式获得提示:man largefile.

于 2009-02-18T08:32:34.957 回答
1

You should use fseeko and ftello, see fseeko(3) Note you should define #define _FILE_OFFSET_BITS 64

#define _FILE_OFFSET_BITS 64
#include <stdio.h>
于 2009-02-18T08:47:23.890 回答