親と子の間の通信の例(質問がいじめに遭遇達成)

 

/ * Bully_al.h * / 
/ *
ブリーアルゴリズム* / の#define MAXHOST 100 の#define INITHOST 2 の#defineランダム(X)(RAND()%のX)/ * すべてのホストIDのメモリ内のメイン処理* / 地図 < INTINT > ALLID; / * <ホストID、PID> * / ベクトル < ストリング > ::イテレータit_v; / * メイン* / クラスホスト{ パブリックINTホストID; / * ID * / pid_t PID = - 1 ; / * プロセスid * / のInt leaderID; INT isLeader = 0 ; 地図 < INTINT > OthersID; / * <ホストID、PID> * / ホスト(); ホスト(); }; ホスト::ホスト(ボイド){ ; } ホスト: :〜ホスト(ボイド){ ; } / * 選挙メッセージ0 アライブメッセージ1 勝2 ハートビートメッセージ3。 * / / * メッセージフォーマット* / / * "のMsgType:SRCID:dstID:PID" * / / * 1、OthersID割り当てに、すべてのサブプロセスを初期化 2、プロセス間通信、 3、プロセス * /

 

 

いじめの実装プロセス:
まず、準備一部

  サブホストを使用して、プロセスシミュレーション:メインプロセス最初フォークN個のサブプロセス、直ちにシミュレーションコードをホストEXEC子の実装は、それぞれの子は、ランダムに話す子によってホストID 0-65535割り当てられたPID-ホストIDは、親プロセスに戻る(使用管)

  すべての子フォークの完了後、ALLID更新とすべての子は、メモリOthersID処理(メッセージキューを使用して)

 

どのように画像データパイプラインを取得する処理をするために:

  子プロセスがexec関数を呼び出した後に、新しいコードの実装を開始し、その後、現在のプロセスは、テキスト、データ、スタックによって置き換えられました。

execの後のプログラムが実行されません。

1 EXECL(" ./hostexe "" hostexe "、NULL);

方法:FDはEXECパラメータhostexeとしてパイプに伝達されます。

 

/ * FD [1]读管道* / 
チャー writefd [ 10 ]。
sprintf(FD、" %dは"やFD [ 1 ])。
EXECL(" ./hostexe "" hostexe " 、writefd、NULL)


/ * EXECLコード* / 
COUT <<のargv [ 1 ] << ENDL。

 

 

 

方法2:dup2の()は、標準入力hostexeのFDに導管をコピーします

 

おすすめ

転載: www.cnblogs.com/threewater/p/10972104.html
おすすめ