c - 複数クライアント - 名前付きパイプ 遅い



名前付きパイプ(mkfifo)で非ブロッキングのfopenを実行するにはどうすればよいですか? (1)

あなたはあなたのパイプをopen()ことができopen() O_RDONLY | O_NONBLOCK O_RDONLY | O_NONBLOCKであり、Cストリームが必要な場合はfdopen()取得できます。 しかし、 select() - AFAIKに問題があるかもしれません。読み込み用のパイプfdは常に読み込みの準備ができていて、 read()は0を返すので、 select()は無期限に起動しselect()

これを克服するためのクルジーな方法は、パイプO_RDWRを開くことです。 つまり、少なくとも1人のライター(あなたのC ++プログラム)を持っていなければなりません。 とにかくあなたの問題を解決するだろう。

mkfifoを使用して名前付きパイプを作成して開こうとするプログラムがある場合、ブロックすることなく読み書き用のパイプを開くにはどうすればよいですか?

具体的には、GUIプログラムの有無にかかわらず実行できるCプログラムを作成しています(Javaで書かれています)。

Cプログラムでは、mkfifoを使用して名前付きパイプを作成することに成功しましたが、

FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/

GUIがそのパイプを書き込み用に開くまで、fopenは戻りません。 私がしたいのは、GUIが書き込みを行うことを決定した場合、そのパイプを一度読み込む準備ができていることです。私はファイルディスクリプタをselect()呼び出しに入れます。 Java GUIが決して実際に起動されないことを期待するのは妥当なことです。そのため、特定の時点でパイプのもう一方の端を開いたり、まったくまったく開くことができません。

私はまた、書き込みのための2番目のパイプを開いて、私は私が同じ問題を抱えていると仮定します。 さらに、読者のない出力パイプにO_NONBLOCKを設定することはできません。

助言がありますか?

(これはLinuxシステム上で実行されています)





fifo