【问题标题】:C - access the file with more pointersC - 使用更多指针访问文件
【发布时间】:2014-08-10 22:42:04
【问题描述】:

我需要使用更多指针访问文件, 我知道函数 fread 并且我知道它的作用,但我需要类似的东西:

我必须能够做这样的事情:

一种方法可以用 3 个不同的 FILE 指针打开 3 次同一个文件(但我认为这是一项肮脏的工作)所以我想知道是否有一种方法可以读取具有多指针的文件并决定切换用我想要的指针到下一个字节或后面的字节。

【问题讨论】:

  • 使用ftell 获取对流当前位置的引用,并使用fseek 稍后返回该位置
  • 如果你想通过不同的FILE 对象访问同一个文件,那至少是不可移植的。你为什么要这么做?
  • @mafso:它真的不便携吗?我认为它在任何地方都可以使用,至少如果你只阅读的话。
  • @DietrichEpp:它是实现定义的(C11 7.19.3 p.8)。不过,我不知道,对于哪些系统不起作用(以及不起作用的系统有多重要)。
  • 我需要它,因为我正在实现 LZ77 算法,所以我需要文件中的更多指针来管理字典的缓冲区

标签: c pointers


【解决方案1】:

选项1:多次打开文件

这完全没问题。它不脏。操作系统和标准库将为您提供一切便利(只要您不同时编写)。

选项 2:读取整个文件

这也完全没问题。大多数文件都很小,适合内存,那么你可以使用普通的指针来指向内存位置。

选项3:内存映射整个文件

在类 Unix 系统上,您可以使用 mmap()。这会将整个文件放在您的地址空间中,但操作系统通常会推迟实际 IO,直到您从内存映射中的特定页面读取。这具有选项 1 和 2 的大部分优点,但使用起来稍微复杂一些,并且您需要为 Windows 编写单独的版本,因为 Windows 没有 mmap()(它还有其他东西,我忘记叫什么了)。

选项4:来回寻找

您可以使用ftell() 保存您的位置,然后稍后再返回fseek()

【讨论】:

  • (你在想MapViewOfFile。)
  • 谢谢...我想我会使用第一个选项...因为我正在实现 LZ77 算法并且选项 1(对我来说)更容易
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 2015-01-31
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多