更快地从文件中读取数据
Read data faster from files
我对在文件中查找有疑问。
我有pcap文件,我需要寻找一个特定的数据包。到目前为止,这是我查找数据包的代码:
while (!find_the_packet)
{
pcap_next_ex(p_pcap, &header, &data); //read the next packet
check_if_the_packet_found();
}
,它工作得很好。
我的目标是更快地找到那个数据包,而不是一个数据包一个数据包地检查,直到找到它。
所以我建立了数据库-哈希映射(键,值)。假设
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只告诉底层库(libc)下一次读取应该发生在哪里。然后,Libc将请求转发给操作系统(通常使用lseek系统调用)。因此,为了在给定位置读取,您有两个系统调用(lseek, read)和一个拷贝(读取从文件系统缓冲区(又称缓存)到程序的地址空间)。
如果您要读取的文件小于可用RAM的大小,并且大部分将被缓存,那么您将受益于映射它。在这种情况下,您还可以要求操作系统惰性预取文件(使用madvise或PrefetchVirtualMemory)。如果文件比可用的RAM大,并且/或者只是偶尔访问,那么读取速度将受到磁盘I/O的限制,使得seek+read和mmap之间的区别变得无关紧要。
相关文章:
- 如何在ros2中从rosbag2读取数据
- OpenCV 和从 OutputArrays 或 (Mat) 读取数据
- 使用C++从磁卡读卡器MT188读取数据
- HDF5 简单读取数据集失败
- 嵌套结构,从由空行分隔的文件中读取数据
- 不要从输入队列套接字读取数据
- 从文件中读取数据,操作员>>
- 如何从excel文件中读取数据并存储到变量中?
- C++:从文件中读取x y数据会产生无限循环吗
- 无法通过FT232RL读取数据
- 如何从QNetworkReply读取数据?
- C++ 逐行从文件(包含空格)读取数据
- 通过显示一行星号来创建条形图,该条形图将读取数据的输入文件
- 我们可以从 TXT 文件中读取数据并使用 C 和 C++ 将其保存到 SQL 数据库吗?
- 从多个 tcp 连接读取数据
- 从文本文件中读取数据并删除所有换行符空格,并在 C++ 控制台中显示
- Qt TCP服务器不从客户端读取数据
- 累积从 C++11 中的文件中读取数据的整数
- 从 txt 文件中读取数据的最简单方法
- 从 txt 文件中读取数据的 Getline