我有關於在文件中查找的問題。從文件中更快地讀取數據
我有pcap文件,我需要尋找一個特定的數據包。到目前爲止,這是我的代碼找到該數據包:
while (!find_the_packet)
{
pcap_next_ex(p_pcap, &header, &data); //read the next packet
check_if_the_packet_found();
}
它運作良好。
我的目標是更快地發現數據包 - 直到找到數據包才檢查數據包。
所以我建立了數據庫 - 哈希圖(key,value)。讓說,
key -> No. of the packet
value -> the packet itself (or the location of the packet)
我也注意到了pcapnav庫函數: pcapnav_goto_offset(pcapnav_t *pn, off_t offset, pcapnav_cmp_t boundary)
,我看到這個函數使用FSEEK。所以我的數據庫不是很有幫助,因爲FSEEK串行工作(糾正我,如果我錯了)。
所以我的問題-
是FSEEK真的串聯?按塊讀塊?它是如何工作的?我有點困惑..
如果是這樣,有沒有更快的方式從pcap文件獲取特定的數據包\大塊數據?
感謝先進。
是的,你錯了['fseek'](http://en.cppreference.com/w/c/io/fseek),它所做的就是設置下一個讀/寫應該發生的位置,基本上它只是一個變量賦值。 –
雖然它可能取決於底層文件系統,但fseek(和下面的讀取)被理解爲在現代實現中幾乎在恆定時間內工作。 – Marian
嗨,謝謝!這是我的困惑 - 假設位置被設置爲文件內的特定點,可以說從當前位置開始是300MB。光標是否會立即進入下一個讀取\寫入位置? – user3378689