"file position" 如何在流 (FILE) 中实现?

How is "file position" implemented in a stream (FILE)?

在《C Programming: A Modern Approach一书的第22章中,作者用一个简短的章节介绍了文件位置[=37=的概念].提供以下说明:

Every stream has an associated file position. When a file is opened, the file position is set at the beginning of the file. (If the file is opened in "append" mode, however, the initial file position may be at the beginning or end of the file, depending on the implementation.) Then, when a read or write operation is performed, the file position advances automatically, allowing us to move through the file in a sequential manner.

在这一段之后,作者深入探讨了几个 <stdio.h> 函数(例如 fseekftell 等),这些函数与“文件位置”的概念有关。

我最近做了一个post(),提供的答案/反馈让我对什么是流,FILE,[=15= 】 其实是。在这个 post 中还向我揭示了一个事实,即缓冲区可以自动( 默认情况下 ” 在调用 fopen 时创建)。

所以我的问题实际上是一个请求:有人可以更详细地向我提供 文件位置 的确切位置吗?它是指向与fopen相关的缓冲区的指针吗?如果它不是 指向缓冲区 的指针,它是否以某种方式与指向缓冲区的指针存在某种对应关系?据推测,文件位置存储在 FILE 内。等等等等

非常感谢任何见解!干杯~

文件位置是与基础文件相关联的数字'handle'。该句柄将是 POSIX-like 系统上的文件描述符(严格来说是 'open file description' 而不是 'open file descriptor',但您暂时可以忘记这种区别 — 请参阅 POISX open()更多信息)。它可能是 Windows 上的 'HANDLE'(但我保留对此错误的权利)。这并不重要,因为 FILE * 抽象将您(程序员)与 low-level 细节隔离开来。

文件位置指定从文件开头开始的偏移量(以字节为单位),activity(读取或写入)将发生在该位置。通过读取或写入数据,或通过寻找新位置来更改位置。内核(操作系统)跟踪位置,并在必要时移动它。文件流 (FILE *) 指向的结构也可以跟踪其数据中的位置。这是因为它必须确保对缓冲区的更改正确反映在文件中,并且文件中的更改正确反映在缓冲区中。缓冲区包含与文件中某些位置范围相关的数据。该范围会随着数据的读取或写入或程序在文件中的查找而变化。