類似linux tail n的功能如何實現

2021-09-23 17:29:17 字數 740 閱讀 4572

如果檔案非常大,如何快速的取到檔案的最後n行資料呢?

使用strace 命令跟蹤下,發現如下的輸出:

strace tail -1000 test.log  2>&1 | grep lseek

lseek(3, 0, seek_cur) = 0

lseek(3, 0, seek_end) = 52876697

lseek(3, 52871168, seek_set) = 52871168

lseek(3, 52862976, seek_set) = 52862976

lseek(3, 52854784, seek_set) = 52854784

...

使用seek_end找到檔案的大小(為52876697)

然後使用seek_set定位到檔案的最後乙個page,從上面這個case看,page大小是8192,最後乙個page沒滿8192位元組,seek到52876697 - 52876697 % 8192 == 52871168這個position

讀取這乙個page的所有資料,統計總共出現多少個換行

如果裡面的行數不到n,再往前seek乙個page(52871168-8192 == 52862976),讀取資料,統計行數。

迴圈步驟4,直到取到n行資料。

順序讀取資料,輸出n行資料。

專案中類似wiki功能

應用場景如下 專案採集的資料不是很完整,陳舊,不理想。希望使用者在使用過程當中,一些業務操作可以給貢獻部分資料 系統採集的資料放到一張系統表a中,使用者通過操作業務,會對我們給它填充的資料進行校驗,修改一些資料,使用者如果對錶進行了修改,那麼我們就保留他修改的資料到臨時表b 下面就是要有乙個審核的問...

類似Access查詢中的記憶功能

procedure t locatefrm.locatebtnclick sender tobject varsetlooptions tlocateoptions i integer slkeys tstrings begin if bobox1.items.indexof bobox1.text...

類似省市聯動的查詢功能實現

實現思路 由於 省市 一般是一對多 主外來鍵 關係 所以當你要通過下拉框選中一級選單 省 出現對應 市 的時候 首先要把所有的 省 從資料庫中取出來 然後通過 省 的外來鍵 id 拿到 市 jsp 省級選單 function loadproducttype category querybyobjec...