如何使用 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);
这将涉及重新阅读文件的一部分,并进行一些跳跃 - 评论中提出了可能更快的替代方法。
出于某种原因(速度和...),我想将 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);
这将涉及重新阅读文件的一部分,并进行一些跳跃 - 评论中提出了可能更快的替代方法。