【问题标题】:C binary file handling as an arrayC 二进制文件作为数组处理
【发布时间】:2013-02-17 19:47:31
【问题描述】:

我想像访问数组一样访问文件,而不是使用 fopen() 和 fgetc()/fputc() 等。

我正在寻找一种方法,它会给我一个指向文件的指针,然后我可以将其视为一个大字符串(EOF 终止或给定长度,无论如何),我希望整个文件都在内存中并且需要快速访问到特定部分。

这可能吗?如果可以,您能推荐一种方法吗?我也很好奇为什么这不是c中访问文件的默认方式,是不是因为文件通常不存储在连续的内存中?

感谢您的帮助。

【问题讨论】:

  • 嗯,在许多环境中,您可以以“内存映射”模式访问文件,允许您使用任何您希望的数组或结构视图覆盖它。

标签: c file binary


【解决方案1】:

您正在寻找一种叫做内存映射文件的东西。例如,如果您使用的是 Unix,请查找 mmap

fd = open(...);    
p = mmap(NULL, buf.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

/* Use `p` like a pointer to some memory and fstat to find size. */

如果您使用的是 Win32,请查找 CreateFileMappingMapViewOfFile

【讨论】:

  • 谢谢,我在 Linux 上,顺便看看!
  • @sfi 我为mmap添加了一些细节。
  • @cnicutar 非常好。谢谢。万一有些 Windows 工程师有类似的问题,并在这里领导。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 2016-10-31
  • 1970-01-01
  • 2016-02-03
  • 2020-10-30
  • 2012-08-01
  • 2013-01-10
相关资源
最近更新 更多