Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
fread()出于某种原因(速度和...),我想用于 IO。我有一个不同大小的行的文件。通过使用如下代码:
fread()
while( !EOF ){ fread(buffer,500MB,1,fileName); // process buffer }
最后一行可能读不完整,下次试读时必须重新读最后一行,那么如何强制fread()从最后一行的开头继续?
或者如果可能的话,如何强制fread()读取超过 500MB 直到达到 \n 或另一个特定字符?
谢谢大家
阿米尔。
假设buffer您已经反转的字节\n在位置找到了一个字符pos,那么您想要回滚到缓冲区的长度减去这个pos。打电话给这个step。
buffer
\n
pos
step
您可以使用fseek将文件指针向后移动这么多:
fseek
int fseek( FILE *stream, long offset, int origin );
在你的情况下
int ret = fseek(stream, -step, SEEK_END);
这将涉及重新阅读文件的一部分,以及相当多的跳跃——评论提出了可能更快的替代方法。