fgets 如何从文件中逐行读取?

How fgets reads line after line from a file?

假设我有:

#define CHUNK_SIZE 256

void copy(FILE *input, FILE *output) {
     char buffer[CHUNK_SIZE];
     while (fgets(buffer, CHUNK_SIZE, input) != NULL) {
          fputs(buffer, output);
     }
}

但是在 while 循环中,fgets 获取相同的参数 - 那么它如何知道在 while 的每次迭代中从文件中读取下一行?它不会因为总是读取同一行而陷入无限循环吗?

编辑:添加了额外的解释,@KlasLindbäck 指出我的回答并不完全正确

File 是一个包含字段 "fd" 的结构,该字段是一个整数,用于标识此文件的 OS 文件描述符,此文件描述符可用于检索文件中的当前位置您正在阅读的文件。如果您想了解有关文件结构的更多信息 here and file descriptor here

TL;DR: FILE 结构以某种方式存储它正在读取的位置。

打开的文件会在内部跟踪下一次读取操作的当前位置。每当您从文件中读取时,位置都会更新。 您可以使用 ftell() 获取当前位置并使用 fseek() 设置当前位置。