如果一个文件存储在硬盘驱动器中,我们为什么要使用指针来创建它?

Vit*_*gen 3 c pointers file

我一直认为指针是 RAM 地址,指向可以随机访问的内存字节。但是,当我们在 C 中创建文件时,我们使用指向文件的指针 FILE*,但是,在我关闭程序后,创建的文件不是保存在我的 HD 中吗?所以,我在这里看到两种可能性:

1) 一个指针可以指向一个硬盘文件

2)文件保存在RAM中(这对我来说没有多大意义)

其中哪一项是真的?或者,如果有第三种可能,那是什么?

提前致谢。

小智 5

正如fopen(), fclose() 究竟如何工作中所述

  • 调用时,fopen 在堆上分配一个 FILE 对象。请注意, FILE 对象中的数据是未记录的 - FILE 是一个不透明的结构,您只能在代码中使用指向 FILE 的指针。
  • FILE 对象被初始化。例如,fillLevel = 0 之类的东西,其中 fillLevel 是尚未刷新的缓冲数据量。
  • 对文件系统驱动程序(FS 驱动程序)的调用会打开文件并为其提供句柄,该句柄位于 FILE 结构中的某处。

  • 为此,FS 驱动程序计算出与请求的路径对应的硬盘地址,并在内部记住该硬盘地址,以便稍后执行对 fread 等的调用。

  • FS 驱动程序使用一种索引表(存储在 HDD 上)来计算与请求路径对应的 HDD 地址。这将根据文件系统类型(FAT32、NTFS 等)的不同而有很大差异。

  • FS 驱动程序依赖于 HDD 驱动程序来执行对 HDD 的实际读取和写入。

  • 可能会在 RAM 中为文件分配缓存。这样,如果用户请求读取 1 个字节,C++ 可能会读取 KB 以防万一,因此后面的读取将是即时的。

  • 从 fopen 返回指向已分配 FILE 的指针。