2011-11-15 11 views
1

パイプから未知数のメッセージを読み込んでいます。ただし、読み取りはブロックされています。私は非ブロックに読み取りを設定する以下のコードを試した。しかし、これにより、読み取りエラーとプロセスが完全に読み込まれませんでした。パイプからの読み取りがブロックされています

// 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); 
+0

select、poll、epollのドキュメントをお読みください。 –

+0

どのようなエラーが発生しますか?ノンブロッキングソケットは、何も読み込めなかったときに常に「読み取りエラー」を返します。 –

+0

@ZanLynxそれは正しいです。十分なプロセスが開始されたとき。いくつかのプロセスは読み取りエラーで終了します。 – sj755

答えて

1

使用して()またはのepoll()を選択します。 ここで問題が発生するコードです。これは、マルチスレッドを使用せずにノンブロッキング読み取り(または書き込み)を実現するための標準的な方法です。

+0

私の場合の例を教えてもらえますか? – sj755

+0

select()に関する何百ものチュートリアルの1つをお読みください。 –

関連する問題