gpt4 book ai didi

c - 如果一个文件存储在硬盘中,为什么我们要用一个指针来创建它呢?

转载 作者:行者123 更新时间:2023-12-01 12:23:01 24 4
gpt4 key购买 nike

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

1) A pointer can points towards a HDD file

2) The file is saved in RAM (that doesn't make much sense to me)

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

提前致谢。

最佳答案

How exactly does fopen(), fclose() work 中所述

  • 调用时,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 的指针。

关于c - 如果一个文件存储在硬盘中,为什么我们要用一个指针来创建它呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42227405/

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