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

时间:2015-10-29 12:14:37

标签: c fgets

我想说:

#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的每次迭代中如何知道从文件中读取下一行?难道它不会陷入无限循环,因为它总是读取相同的行吗?

2 个答案:

答案 0 :(得分:0)

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

文件是一个结构,它包含一个字段“fd”,它是一个标识该文件的OS文件描述符的整数,该文件描述符可用于检索您正在读取的文件中的当前位置。如果您想了解有关File struct here和文件描述符here

的更多信息

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

答案 1 :(得分:0)

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