fgets 是否以某种方式保持停止读取 FILE *stream 的位置?

fgets 是否以某种方式保持停止读取 FILE *stream 的位置?

我正在尝试获取一个关于如何写入文件的示例程序:

#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv){
  char buff[1024];
  size_t len, idx;
  ssize_t wcnt;
  for (;;){
    if (fgets(buff,sizeof(buff),stdin) == NULL)
      return 0;
    idx = 0;
    len = strlen(buff);
    do {
      wcnt = write(1,buff + idx, len - idx);
      if (wcnt == -1){ /* error */
        perror("write");
        return 1;
      }
      idx += wcnt;
    } while (idx < len);
  }
}

所以我的问题是这样的:假设我想写入一个 20000 字节的文件,因此每次我只能写入(最多)1024(缓冲区大小)。
假设在我第一次尝试时一切顺利,fgets() 读取了 1024 个字节,并且在我的第一个 do while 中我写入了 1024 个字节。
然后,由于我们写入了“len”个字节,因此我们退出 do-while 循环。
那么现在怎么办??根据我们之前的读取,缓冲区已满。 在我看来,由于某种原因,这意味着 fgets() 现在将从上次在文件中到达的点继续读取。(此处为 buf[1024])。
fgets() 怎么知道它在文件中停止读取的位置?
我检查了手册页:

fgets() 从流中读取最多一个小于 size 的字符,并将它们存储到 s 指向的缓冲区中。读取在 EOF 或换行符后停止。如果读取了换行符,则将其存储在缓冲区中。终止空字节 (aq\0aq) 存储在缓冲区中的最后一个字符后。fgets
() 在成功时返回 s,在错误时或当文件末尾发生且未读取任何字符时返回 NULL。*

因此从那里,我得到它返回一个指向 buf 第一个元素的指针,它始终是 buf[0],这就是我感到困惑的原因。

相关内容