当前位置: 首页 > 面试题库 >

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

慕容典
2023-03-14
问题内容

我使用G ++中的标准 ftellfseek 选项 遇到 整数溢出,但是我想我错了,因为似乎 ftell64fseek64
不可用。我一直在搜索,很多网站似乎都使用 lseekoff64_t 数据类型进行引用,但是我还没有找到任何引用等于 fseek的
示例。现在,我正在读取的文件是16GB + CSV文件,期望至少翻倍。

没有任何外部库,最简单的方法来实现与 fseek / ftell 对相似的结构?我的应用程序现在可以使用用于4.x的标准GCC / G ++库工作。


问题答案:

fseek64是C函数。为了使它可用,您必须在包含系统头文件之前定义_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,但在Solaris上可能返回其他内容。对于链接,应该使用通过getconf LFS_LDFLAGS报告的链接标志。在Linux系统上,您不需要特殊的链接标志。
  • 定义_LARGEFILE_SOURCE和_LARGEFILE64_SOURCE。使用这些定义,您可以直接使用像open64这样的LFS函数。
  • 将O_LARGEFILE标志与open一起使用可对大文件进行操作。


 类似资料:
  • 我想在shell编程中创建一个函数,它获取两个参数,目录名和文件名,并执行以下操作:它从给定的目录名开始搜索文件名,然后进入目录名的所有子目录继续搜索。我希望输出是找到文件名的每个父目录,使用文件名大小进行排序。 我们将不胜感激,谢谢。

  • 有了这个代码,我想要一个. jar文件来读取文本文件“file.txt”,它位于文件夹数据的jar中。这是一个应用程序编程与处理,所以我想读的所有文件都在数据文件夹中。有人能解释为什么我得到一个NullPointerExcema吗?文件存在并包含文本。

  • 问题内容: 我的Flask应用程序结构如下所示 当我运行时,它将在处启动服务器。在我,我尝试打开该文件作为 它给出了错误 如何访问此文件? 问题答案: 认为问题出在你/的道路上。删除,/因为与处于同一级别。 我建议将水平设置为或许多Flask用户喜欢使用,但我不喜欢。 如果这是你要设置的方式,请尝试以下操作: 现在,你可以轻松执行以下操作: 根据需要调整路径和级别。

  • 我在包'\src\main\resources\'中有一个文件。我希望在位于'src\main\java\com\xxxx\xxxx\services\'的。java文件中读取该文件。当我运行以下代码时, 我将USER_DIRECTORY的值设置为'C:\workspace\apache-tomcat-7.0.70\bin',将DOCUMENT_DIRECTORY的值设置为'C:\workspac

  • 我遵循这个http://blog.kondratev.pro/2015/08/reading-xlsx-on-android-4-and-hopefully.html对其进行了编码。 尝试逐行读取: 但结果却是:

  • 我们如何使用Spring Boot在Web应用程序构建的Web应用程序上下文中找到所有bean。我看到了许多从应用程序上下文中获取bean但不从Web应用程序上下文中获取bean的示例。