gpt4 book ai didi

c++ - 在 Linux C++ 应用程序中查找和读取大文件

转载 作者:行者123 更新时间:2023-11-30 17:50:34 29 4
gpt4 key购买 nike

我使用 G++ 内的标准 ftellfseek 选项遇到整数溢出,但我想我错了,因为似乎 ftell64 em> 和 fseek64 不可用。我一直在搜索,许多网站似乎引用使用 lseekoff64_t 数据类型,但我没有找到任何引用等于 fseek 的示例。现在我正在读取的文件是 16GB 以上的 CSV 文件,预计至少是这个大小的两倍。

在没有任何外部库的情况下,实现与fseek/ftell对类似的结构的最直接方法是什么?我的应用程序现在使用 4.x 的标准 GCC/G++ 库运行。

最佳答案

fseek64 是一个 C 函数。为了使其可用,您必须在包含系统 header 之前定义 _FILE_OFFSET_BITS=64 这或多或少将 fseek 定义为实际的 fseek64。或者在编译器参数中执行此操作,例如 gcc -D_FILE_OFFSET_BITS=64 ....

http://www.suse.de/~aj/linux_lfs.html对 Linux 上的大文件支持有一个很好的概述:

  • 使用“gcc -D_FILE_OFFSET_BITS=64”编译程序。这会强制所有文件访问调用使用 64 位变体。几种类型也会发生变化,例如off_t 变为 off64_t。因此,始终使用正确的类型并且不要使用例如int 而不是 off_t。为了与其他平台的可移植性,您应该使用 getconf LFS_CFLAGS ,它将在 Linux 平台上返回 -D_FILE_OFFSET_BITS=64,但可能会在例如 Linux 平台上返回其他内容。索拉里斯。对于链接,您应该使用通过 getconf LFS_LDFLAGS 报告的链接标志。在 Linux 系统上,您不需要特殊的链接标志。
  • 定义 _LARGEFILE_SOURCE 和 _LARGEFILE64_SOURCE。通过这些定义,您可以直接使用 open64 等 LFS 函数。
  • 使用 O_LARGEFILE 标志和 open 来操作大文件。

关于c++ - 在 Linux C++ 应用程序中查找和读取大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17189567/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com