パイプから未知数のメッセージを読み込んでいます。ただし、読み取りはブロックされています。私は非ブロックに読み取りを設定する以下のコードを試した。しかし、これにより、読み取りエラーとプロセスが完全に読み込まれませんでした。パイプからの読み取りがブロックされています
// Set pipe to non-blocking
sleep(5);
fcntl(fd[index][0], F_SETFL, O_NONBLOCK);
プログラムを停止せずにすべてのメッセージを正常に読み取って印刷するにはどうすればよいですか?
// Read every message
while((n = read(fd[index][0], &mymsg, sizeof(int))) == sizeof(int))
printf("process%d has received a message from process%d\n", index, mymsg);
select、poll、epollのドキュメントをお読みください。 –
どのようなエラーが発生しますか?ノンブロッキングソケットは、何も読み込めなかったときに常に「読み取りエラー」を返します。 –
@ZanLynxそれは正しいです。十分なプロセスが開始されたとき。いくつかのプロセスは読み取りエラーで終了します。 – sj755