繁体   English   中英

fscanf()和fgets()这样的函数如何记住文件中的哪些内容开始读取?

[英]How do functions like fscanf() and fgets() remember where in the file to start reading from?

例如,当使用fscanf()读取文件时,它似乎记住它最后一次终止的位置,而不是再次从文件的开头开始。 有人可以详细说明这是如何工作的吗? 我发现很难使用这些功能,因为我不理解这个组件。

FILE *参数指向缓冲区和文件句柄(请参阅fileno()函数)。

实际在文件结构中的内核中记住的位置。

有一个图例, FILE *指针指向文件。 这不是字面意义,但对于初级程序员的解释可能也是如此。

实际上发生的事情如下:每个进程在struct file内核中都有一个数组(这种类型没有在用户空间中定义,因此不要去查找它),其中包含所有打开的文件。 一个句柄由open()系统调用返回,它只是数组的索引。 函数fileno()fopen()返回的FILE *指针中检索句柄,可以直接操作。 除了访问ioctl()fctl()之外,这通常是一个坏主意,因为您最终将与FILE对象中的内部缓冲区进行战斗。

struct file一个成员是loff_t f_pos ,它是内核read()write()停止的确切位置(以字节为单位write() 这是在FILE中缓冲的,它知道它前面读取的字节数或后续写入的字节数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM