getline 如何在不查找的情况下只读到换行符?

how does getline read only up to a newline without seeking?

我在想象 逐字节读取 效率会非常低,但是批量读取几乎总是会超出需要,需要将剩余的读取输入存储在供所有后续读取操作查找的全局上下文。我错过了什么?

原型为:

ssize_t getline(char **lineptr, size_t *n, FILE *stream);

所以它显然使用了 FILE,它已经被缓冲了。所以一个字符一个字符的读取一点也不低效。

这就是 buffered io 的用途。长话短说,C 库读取一个完整的缓冲区,其大小取决于实现但相当大,然后 getline 函数在该内存缓冲区中查找第一个换行符,为下一次访问保留指针。