2009-02-18 34 views
8

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

+0

你正在运行什么文件系统,内核版本和发行版本? – womble 2009-02-18 08:27:31

+0

重新标记以添加linux – 2009-02-18 08:50:00

回答

11

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

  • 你不必在你的Linux内核启用Large File Support
  • 您的应用程序不具有大文件支持编译(您可能需要通过额外的gcc标志来告诉它使用特定的文件I/O功能的64位版本。例如gcc -D_FILE_OFFSET_BITS=64
4

这取决于filesystem type。当使用ext3时,我不会遇到那些显着更大的文件的问题。

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

3

这可能与system limitation configuration有关吗?

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

如果你不希望任何限制从/etc/security/limits.conf删除fsize

1

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

1

您应该使用fseeko和ftello,看到fseeko(3) 注意你应该定义#define _FILE_OFFSET_BITS 64

#define _FILE_OFFSET_BITS 64 
#include <stdio.h> 
相关问题