次のコードは、パイプを通じて他のプロセスからのメッセージを読み取ります。すべてのプロセスがすべてのメッセージを正しく出力しますが、whileループを過ぎることはありません。 Eclipseでデバッグを試みましたが、すべてのメッセージを読んだ後、ループ中に停止します。プロセスが読み取りでハングする
インデックスは、各プロセスに割り当てられた番号です。最初のプロセスはインデックス== 0を持ちます。 メッセージ自体は単にメッセージを送信するプロセスのインデックスです。
while((n = read(fd[index][0], &mymsg, sizeof(int))) == sizeof(int))
printf("process%d has received a message from process%d\n", index, mymsg);
これはどうなるのでしょうか?
// Write to other process
if(write(fd[index2][1], &index, sizeof(int)) != sizeof(int))
sys_error(2);
これが5回行われます。ここでは
は、各プロセスが別のものに書き込む方法です。 fdは各プロセスの読み書き終了の表です。
これはなぜあなたが期待する動作ではないのかはっきりしません。どのような条件の下では、コードは 'while'ループを過ぎて進んでいますか? –
@DavidSchwartzバイトを読み取らない場合、エラーが返されます。 – sj755
これらのことが起こると思われる特別な理由はありますか?そうでない場合は、なぜwhileループを終了する必要がありますか? (ファイル記述子は非ブロック化ですか?) –