【问题标题】:Two processes sharing same pcap file两个进程共享同一个 pcap 文件
【发布时间】:2014-07-17 13:11:19
【问题描述】:

我有一个使用 pcap 文件的 c++ 程序(在 linux 上执行)。处理来自此 pcap 文件的每个数据包,并在文本文件中生成结果。我编写了一个脚本,它使用不同的输入参数运行该程序的两个实例。该程序的一个实例在一个 CPU 上运行,另一个实例在第二个 CPU 上运行。

问题是在我的程序中我硬编码了 pcap 文件名。结果,在两个 CPU 上都会打开 pcap 文件并从中读取数据包。

我希望两个程序都打开同一个 pcap 文件进行读取,这种情况只发生一次,即有一次打开 pcap 文件,并且它的每个数据包都发送到 CPU1 和 CPU2 上运行的进程。

请给我一些指导,我该如何完成这项任务。

【问题讨论】:

  • 所以您想要第三个程序读取 PCAP 文件并以某种方式将数据包发送到其他两个程序?为什么?作为您刚刚从 PCAP 文件中读取的程序,不会有任何问题。
  • @JoachimPileborg 这不会对内存使用造成任何问题,因为两个进程都在打开同一个 pcap 文件。
  • 我不知道 PCAP 库,但除非文件非常大并且完全加载到内存中,否则不会有问题。你不用担心,例如您的编辑器和编译器正在加载您的源文件?
  • @JoachimPileborg Pcap 是一个由wireshark 创建的包含网络数据包的文件。在我的例子中,它的大小是 2GB。对不起,我不明白你的问题。我刚刚使用 g++ 编译了我的 c++ 代码并在两个 CPU 上运行它的可执行文件。
  • 关于这个问题,我的意思是多个程序同时访问一个文件并不罕见。由于文件很大,您必须检查它是如何加载的。如果它一次全部加载到内存中,那么你需要有超过 4GB 的虚拟内存,如果文件是分段加载的(这对于这种类型的文件来说是很自然的事情),那么两个程序读取没有问题它。

标签: c++ linux process parallel-processing


【解决方案1】:

听起来您希望您的流程执行以下操作:

  1. 打开您的 pcap 文件
  2. 从中读取一些数据包
  3. 将该数据包传递给进程的两个线程,每个线程的配置不同

您可以让您的脚本读取 pcap 文件并将标准输入上的二进制数据传递给您的 c++ 程序,然后由 c++ 程序处理它。或者您可以使用套接字、共享内存、管道而不是标准输入。

我假设您可以访问您所说的程序的代码。

如果不是,那就更复杂了。

【讨论】:

  • 为简单起见,我只使用标准输入或管道。但如果我没有那个选项,我可能会在套接字上发送它
猜你喜欢
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 2011-05-23
  • 2012-07-21
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多