流FILE中如何实现“文件位置”?

问题描述

在“ C编程:一种现代方法”一书的第22章中,作者专门介绍了文件位置的概念,并提供了以下说明:

每个流都具有关联的 文件位置 。打开文件时,文件位置设置在文件的开头。 (但是,如果以“附加”模式打开文件,则根据实现的不同,初始文件位置可能位于文件的开头或结尾。)然后,在执行读取或写入操作时,文件位置会前进自动,使我们可以按顺序浏览文件。

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

我最近发表了一篇文章(What is the difference between a pointer to a buffer and a pointer to a file?),提供的答案/反馈使我对初学者FILEFILE *的实际含义有了一个不错的了解。这篇文章还向我揭示了一个事实,即可以自动创建缓冲区(在调用fopen时创建“ 默认”)。

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

任何见识都将不胜感激!干杯〜

解决方法

文件位置是与基础文件“ handle”关联的数字。该句柄将是类似POSIX的系统上的文件描述符(严格来说是“打开文件描述”,而不是“打开文件描述符”,但是暂时您可以忘记这种区别—有关更多信息,请参见POISX open() )。在Windows上可能是'HANDLE'(但我保留对此有误的权利)。没关系,FILE *抽象使您(程序员)与底层细节隔离。

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...