2016-10-15 4 views
1

特定のパケットをキャプチャして分析するプログラムを作成しようとしています。私はpcap_loopを使用してパケットをキャプチャします。これは、私のプログラムがこのコマンドで無期限にスタックされていることを意味します。だから私の解決策は、2つのプロセスを作成することです。そのうちの1つはパケット(子)をキャプチャし、もう1つは抽出した情報を使用して分析(親)を行います。プログラムが無限に実行され、分析がリアルタイムで起こるようにプログラムがこのような何かを探すようにするために、私は希望:親プロセス "子どものメッセージを聞いて"

子供:

capture_packets(packet_foo()); 

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

親:

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

私はあなたが理解してほしいです私がやろうとしていること。このようなコミュニケーションを生み出すことは可能ですか?私は考えることができないこれを行うための良い方法はありますか?

ありがとうございました。

+1

もちろん、特に方向が1つしかない場合は、2つのプロセスが通信することは可能です。これまでのところ、簡単なテキストプロトコルを設計し、パイプ上で2つの話をすることさえできます。 '子ども| parent'または 'capture_packets |分析装置。 –

+0

ええ、間違いなく可能ですが、親がメッセージを送信するのを子どもが待つ部分にもっと興味があります – mandatory

+0

どのプログラミング言語を使用していますか? –

答えて

0

通常あなたがコンテナを使用することができ、あなたのケースでは、あなたがそれで何ができるかキュー

std::queue

は、プロデューサ/コンシューマパターンです。

親は、情報を監視して親に送信する子スレッドを開始します。しかしどのように?

これらをキューに配置すると、注文は保存され(FIFO)、親側ではキューに情報があるかどうかを確認する必要があります。もしそうでなければ何もする必要はありません。しかし、あるものがあれば、それらを一つずつ取り、あなたがそれらを扱います。

std :: queueはスレッドセーフではないので、スレッドセーフな独自の実装を作成するか、親と子の間で共有されるmutexによってstd :: queueへのアクセスを保護します)

関連する問題