純真 IP 庫(QQWry.dat)是廣泛使用的離線 IP 地理位置資料庫,約每 5 天更新一次。將資料庫載入共享記憶體,可讓多行程共享資料並達到微秒級查詢效能。本文提供完整 C 實作,在 42 萬筆資料下單次查詢僅需微秒。
mmap() 將 qqwry.dat 映射至共享記憶體(/tmp/qqwry.dat)。typedef struct {
char *p_country; // 國家指標
char *p_area; // 地區指標
char beginip[46]; // 起始 IP 字串
char endip[46]; // 結束 IP 字串
} location;
createshare() 建立並載入資料。解析總筆數 total_record。unsigned long。p_begin ~ p_end)。gcc -o iplocation iplocation.c
./iplocation 58.62.69.255
# 輸出:
# ip=58.62.69.255 is between 58.62.64.0,58.62.69.255
# location:廣東省廣州市番禺區 電信
文中包含完整 iplocation.c,涵蓋共享記憶體建立/開啟/關閉、IP 解析、二分搜尋、字串重導向處理、主程式入口等所有細節,可直接編譯部署。
本文整理自「一方有」博客,原文出處:https://yifangyou.blog.51cto.com/900206/617658