[英]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.