如何使用 fread 正确缓冲行

How to correctly buffer lines using fread

出于某种原因(速度和...),我想将 fread() 用于 IO。我有一个包含不同大小线条的文件。通过使用如下代码:

while( !EOF ){ 
  fread(buffer,500MB,1,fileName);
  // process buffer
}

最后一行可能读不完整,下次试读还要重新读最后一行,那么如何强制fread()从最后一行开始继续呢?

或者如果可能如何强制fread()读取超过 500MB 直到到达 \n 或其他特定字符?

谢谢大家

阿米尔。

假设您反向的 buffer 个字节在位置 pos 找到了一个 \n 字符,那么您想要回滚到缓冲区的长度减去这个 pos。调用此 step.

您可以使用 fseek 将文件指针向后移动这么多:

int fseek( FILE *stream, long offset, int origin );

你的情况

int ret = fseek(stream, -step, SEEK_END);

这将涉及重新阅读文件的一部分,并进行一些跳跃 - 评论中提出了可能更快的替代方法。