尾部-n的高效实现

nik*_*hil 2 c++

可能重复:
你如何有效地实现尾部?

我的一个朋友被问到他是如何实施的tail -n.为清楚起见,我们需要打印n指定文件的最后几行.

我想过使用n个字符串的数组并以循环方式覆盖它们.但是,如果我们给出一个10 GB文件,这种方法根本不会扩展.

有一个更好的方法吗?

Dav*_*eas 6

内存映射文件,从末尾迭代查找行结束n时间,从该点写入文件末尾到标准输出.

您可能通过不映射整个文件,但只是最后一个X kb的内存(比如几个内存页)并在那里寻找,可能会使解决方案复杂化.如果没有足够的线,那么内存会映射一个更大的区域,直到你得到你想要的.您可以使用一些启发式来实现您想要映射多少内存的猜测(例如,每行1kb作为粗略估计).我不会真的这样做.