首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C处理大文件

C处理大文件
EN

Stack Overflow用户
提问于 2010-09-11 10:43:43
回答 5查看 4.8K关注 0票数 8

我需要解析一个可能有很多gbs大小的文件。我想用C语言来做这件事,有谁能建议一些方法来完成这件事吗?

我需要打开和解析的文件是我从mac硬盘中获得的硬盘转储文件。然而,我计划在64位Ubuntu10.04中运行我的程序。此外,考虑到文件大小,优化的方法越多越好。

EN

回答 5

Stack Overflow用户

发布于 2010-09-11 11:26:54

在*nix和Windows上,都有I/O例程的扩展,这些例程涉及支持大于2 2GB或4 2GB的文件大小。当然,底层文件系统也必须支持这么大的文件。在Windows上,NTFS支持,但FAT不支持。这通常被称为“大文件支持”。

对于这些目的来说,最关键的两个例程是fseek()ftell(),这样您就可以随机访问整个文件。否则,普通的fopen()fread()以及朋友可以顺序访问任何大小的文件,只要底层的OS和stdio实现支持大文件即可。

票数 6
EN

Stack Overflow用户

发布于 2010-09-11 11:24:19

假设您使用的是linux/bsd/mac/notwindows 64位系统(说真的,现在谁不是这样的呢?),mmap运行得非常好。它本质上允许您将整个文件映射到进程的地址空间,并让内核为您执行缓存/分页。

如果你一定要使用windows,here的概念是一样的,但它是由雷蒙德公司友好的人开发的。请注意,对于这两种系统中的任何一种,你都需要在64位系统上运行,因为你可以在32位系统上映射的最大文件大小是~4 4GB。

票数 1
EN

Stack Overflow用户

发布于 2010-09-11 14:42:05

除了RBerteig和Matt的回答:

我认为,如果你为项目中的所有文件正确而谨慎地启用了64位IO支持(这些文件的方法依赖于系统),如果你使用了正确的类型,你就不必担心整数溢出。然后,off_t应该是定位文件指针的正确选择。

如果所有其他方法都失败了,那么就使用正确的C99类型,如果您对类型的宽度做了一些假设。使用intlong几乎总是错误的,因为它们太依赖于编译器/平台。使用int64_t (如果没有,则使用int_fast64_t )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3689583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档