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

发布于 2024-07-13 15:27:25 字数 225 浏览 11 评论 0原文

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

I have this home work where I have to transfer a very big file from one source to multiple machines using bittorrent kinda of algorithm. Initially I am cutting the files in to chunks and I transfer chunks to all the targets. Targets have the intelligence to share the chunks they have with other targets. It works fine. I wanted to transfer a 4GB file so I tarred four 1GB files. It didn't error out when I created the 4GB tar file but at the other end while assembling all the chunks back to the original file it errors out saying file size limit exceeded. How can I go about solving this 2GB limitation problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

浮华 2024-07-20 15:27:25

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

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

I can think of two possible reasons:

  • You don't have Large File Support enabled in your Linux kernel
  • Your application isn't compiled with large file support (you might need to pass gcc extra flags to tell it to use 64-bit versions of certain file I/O functions. e.g. gcc -D_FILE_OFFSET_BITS=64)
染墨丶若流云 2024-07-20 15:27:25

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

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

This depends on the filesystem type. When using ext3, I have no such problems with files that are significantly larger.

If the underlying disk is FAT, NTFS or CIFS (SMB), you must also make sure you use the latest version of the appropriate driver. There are some older drivers that have file-size limits like the ones you experience.

忆梦 2024-07-20 15:27:25

这是否与系统有关限制配置

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

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

Could this be related to a system limitation configuration ?

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

If you do not want any limit remove fsize from /etc/security/limits.conf.

梦回梦里 2024-07-20 15:27:25

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

If your system supports it, you can get hints with: man largefile.

毁梦 2024-07-20 15:27:25

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

#define _FILE_OFFSET_BITS 64
#include <stdio.h>

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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文