如何在Linux / Unix中创建大小超过2GB的文件?

时间:2009-02-18 08:23:39

标签: linux tar filesize

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

5 个答案:

答案 0 :(得分:11)

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

  • 您的Linux内核中没有启用Large File Support
  • 您的应用程序未使用大文件支持进行编译(您可能需要传递gcc额外标志以告知它使用64位版本的某些文件I / O函数。例如gcc -D_FILE_OFFSET_BITS=64

答案 1 :(得分:4)

这取决于filesystem type。使用ext3时,我对没有明显更大的文件没有这样的问题。

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

答案 2 :(得分:3)

这可能与system limitation configuration相关吗?

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

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

答案 3 :(得分:1)

如果您的系统支持它,您可以获得提示:man largefile

答案 4 :(得分:1)

您应该使用fseeko和ftello,请参阅fseeko(3) 请注意,您应该定义#define _FILE_OFFSET_BITS 64

#define _FILE_OFFSET_BITS 64
#include <stdio.h>