/ * Bully_al.h * /
/ * ブリーアルゴリズム* / の#define MAXHOST 100
の#define INITHOST 2
の#defineランダム(X)(RAND()%のX)/ * すべてのホストIDのメモリ内のメイン処理* /
地図 < INT、INT > ALLID; / * <ホストID、PID> * /
ベクトル < ストリング > ::イテレータit_v; / * メイン* / クラスホスト{
パブリック:
INTホストID; / * ID * /
pid_t PID = - 1 ; / * プロセスid
* /
のInt leaderID;
INT isLeader = 0 ;
地図 < INT、INT > 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に導管をコピーします