mkfifo を使用して名前付きパイプを作成して開こうとするプログラムがある場合、パイプをブロックせずに読み取りまたは書き込み用に開くにはどうすればよいですか?
具体的には、GUI の有無にかかわらず実行できる C プログラムを作成しています (Java で作成)。
C プログラムでは、mkfifo を使用して名前付きパイプを正常に作成しましたが、
FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/
fopen は、GUI がそのパイプを書き込み用に開くまで戻りません。私がやりたいことは、(GUI がそれに書き込むことを決定した場合) そのパイプを一度読み取れるようにすることです。ファイル記述子を select() 呼び出しに入れます。Java GUI が実際に開始されることは決してないと予想するのは合理的であるため、特定の時点で、またはまったくパイプのもう一方の端を開くために Java GUI に依存することはできません。
また、書き込み用に 2 つ目のパイプを開きますが、同じ問題が発生すると思います。さらに、リーダーのない出力パイプに O_NONBLOCK を設定することはできません。
助言がありますか?
(これはLinuxシステムで実行されています)