C/C++中从文件末尾反向读取N行文件记录(末尾读取文件)
最近在實(shí)際的開(kāi)發(fā)項(xiàng)目遇到了一個(gè)問(wèn)題,有個(gè)24小時(shí)在跑的Linux程序,會(huì)不斷有日志輸出,寫到一個(gè)指定的日志文件中。但是,日志只提供了輸出的功能,并沒(méi)有讀取日志文件的功能。如果給程序員自己看日志是很簡(jiǎn)單的,只需要用tail 或 vi 即可。但是現(xiàn)在有個(gè)需求,需要在程序的界面上顯示日志文件的內(nèi)容,而且是最近的100行記錄。在網(wǎng)上搜索了一遍,總結(jié)一下:
1:從文件頭開(kāi)始,先用getline函數(shù)獲取每一行,然后再丟棄前面的數(shù)據(jù)。
?我:不行,日志文件有可能幾百M(fèi)B,全部讀一篇再丟棄是行不通的。
2:自己先計(jì)算文本有多少行,然后再截取。
我:沒(méi)有找到具體的實(shí)現(xiàn)代碼,而且我正在讀取這個(gè)文件時(shí)有可能程序正在輸出日志,不能隨意破壞文件的輸出。
最終沒(méi)找到合適解決方案,我自己的思路是這樣的:
1:打開(kāi)文件
2:將文件指針移到最后。
3:反向搜索換行符,如果達(dá)到100行則停止搜索了。
4:根據(jù)當(dāng)前位置再將一行行記錄讀取放到vector里。
5:現(xiàn)在可以將vector里的記錄進(jìn)行處理。
實(shí)現(xiàn)后發(fā)現(xiàn)反向讀取100的內(nèi)容還是很快的,0.1毫秒都不用,當(dāng)然,這要看一行的內(nèi)容有多少。
而且代碼中并不真正去讀取字符,只是用C++的io輸入流中的peek函數(shù)查看數(shù)據(jù),效率提高了。
代碼如下:
---------------------?
?
總結(jié)
以上是生活随笔為你收集整理的C/C++中从文件末尾反向读取N行文件记录(末尾读取文件)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SQL中的条件语句case-when-t
- 下一篇: 在Ubuntu 16.04 安装pyth