如何在Linux / Unix下创build一个大于2GB的文件?

我有这样的家庭工作,我必须从一个源传输一个非常大的文件到多个机器使用bittorrent类别的algorithm。 最初我将文件分割成大块,然后把块传送到所有的目标。 目标有智能分享他们与其他目标的块。 它工作正常。 我想传输一个4GB的文件,所以我tarred四个1GB的文件。 当我创build4GB的tar文件时没有错误,但是在将所有的块组装回原始文件的时候,在错误输出文件大小限制超出的情况下, 我怎样才能解决这个2GB的限制问题?

Solutions Collecting From Web of "如何在Linux / Unix下创build一个大于2GB的文件?"

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

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

这取决于文件系统类型 。 当使用ext3,我没有这样的问题,显着更大的文件。

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

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

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

如果你不想限制从/etc/security/limits.conf删除fsize

如果你的系统支持它,你可以使用man largefile得到提示。

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

 #define _FILE_OFFSET_BITS 64 #include <stdio.h>