fread 如何知道它上次停止的位置?

How does fread know where it last stopped?

Fread 显然知道它最后停下的地方,我的意思是:

while(fread(buffer, 1, 1, file))
{
    …
}

这个循环会在上次停止的地方继续下一次。我假设它只是将 file 指针向前移动,但是有人可以解释一下它是否完全一样吗?

函数fread从一个流中读取,它不一定是一个文件。流也可以链接到 consoles/terminals。有些流是可搜索的并且有文件位置指示器,有些则没有。链接到实际文件的流通常有一个文件位置指示器。

函数fread 本身不推进任何文件位置指示器(它不调用fseek)。它只是从流中读取。

如果流有文件位置指示符,那么只要在流上发生读取,runtime library 就会推进文件位置指示符。它对流上的所有读取执行此操作,而不仅仅是 fread.