gpt4 book ai didi

c - 了解文件指针和缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:26 25 4
gpt4 key购买 nike

为什么在 C 中需要一个单独的缓冲区来读取 FILE *?当您声明一个 FILE * 并使用 fopen 分配给它时,该文件是否不存在于从所述指针的地址开始的连续内存中?我正在努力就为什么需要通过 fread() 读取到单独的缓冲区中建立联系。如果有人可以解释 FIlE *file = fopen(filename, "r") 和随后的 fread(&buffer,...) 是如何协同工作的,那将有助于我非常理解。提前致谢。

最佳答案

fopen 返回的 FILE * 是一个不必要但有用的间接层。

理论上,fopen 可以设计为将整个文件读入内存中的缓冲区,然后返回该缓冲区。

问题方法是它根本不灵活。它强制您为所有文件 IO 操作读取整个文件,这是非常不可取的。例如,这里有一些会出现的问题:

  • 您如何读取一个太大而无法放入 RAM 的文件?
  • 如果您只想在文件末尾追加一个新行(例如用于日志记录)怎么办?您将不得不读取整个文件,在末尾附加该行,然后重写整个文件。贵!
  • 如果您只对阅读文件的一小部分感兴趣,例如阅读 magic number 怎么办?识别文件的类型,而不考虑其实际内容?
  • 如果您想从多个程序同时编辑文件怎么办?每个程序都需要不断地将整个文件重新读入内存,以确保它保持最新。

fopen 返回标识仍在磁盘上的文件的文件句柄。将多少文件读出到内存中完全取决于您。

关于c - 了解文件指针和缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42523304/

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