2016-10-15 39 views
1

我想创建一个捕获某些数据包并分析它们的程序。我使用pcap_loop来捕获数据包,这意味着我的程序无限期地停留在这个命令上。所以我的解决方案是创建2个proccesses,其中一个将捕获数据包(子),另一个将使用提取的信息进行分析(父级)。作为该计划无限期地运行和分析实时发生的,我想对于程序看起来像这样:父进程“倾听”孩子的消息

儿童:

capture_packets(packet_foo()); 

packet_foo() { 
    extract_info(); 
    send_to_parent() 
} 

家长:

while(1) { 
    wait_for_msg_from_child(); 
    recv_msg(); 
    analyze(); 
    printf(); 
} 

我希望你明白我正在尝试做什么。是否有可能创造这种沟通?有没有更好的方法来做到这一点,我想不出来?

谢谢。

+1

当然,两个进程之间可以进行通信,特别是如果只有一个方向的话。你甚至可以走得这么远,设计一个简单的文本协议,并通过管道进行两次谈话,例如,孩子|父'或'capture_packets | analyzer'。 –

+0

是的,我知道这绝对有可能,但我更感兴趣的是家长“等待”孩子发送消息的部分 – mandatory

+0

您正在使用哪种编程语言? –

回答

0

通常你可以使用一个容器,你的情况队列

std::queue

什么,你可以用它做的是一个生产者/消费者模式。

家长启动子线程,该子线程将监视任何信息并将其发送给父级。但是如何?

通过将它们放置在队列中,订单get被保留(FIFO)并且在父级方面,您需要检查队列中是否存在某些信息。如果不是,你没有任何事情要做。但是如果有的话,你可以一个接一个地处理它们。

请注意,std :: queue不是线程安全的,因此您要么编写自己的线程安全实现,要么通过父级和子级之间共享的互斥锁保护对std :: queue的访问(s )