• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:名前付きパイプを使い文字列をブロードキャスト)

名前付きパイプとブロードキャスト方法についての疑問

このQ&Aのポイント
  • 名前付きパイプを使って文字列をブロードキャストする方法について疑問があります。
  • 名前付きパイプは早い者勝ちでデータを取得するため、全てのプロセスにデータを流すことができないのか疑問です。
  • 通常ファイルに出力を書き込んで全てのプロセスがデータを取得した後にキューを削除する方法はありますが、よりスマートな方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

タイトルにあるように名前付きパイプを作れば良いのですが、 シェル1$ mkfifo fifo1 fifo2 cat|tee fifo1 >fifo2 シェル2$ cat fifo1 シェル3$ cat fifo2 不要になったfifo1 fifo2はあとで消しておく必要があります。 プロセス置換という方法もあります。(こちらは、名前付きパイプ プロセス置換で検索すればでてきます)

sumire_kanou
質問者

お礼

ありがとうございます。プロセス置換という方法もあるんですね。早速、勉強いたします。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10361)
回答No.2

>Q1) 名前付きパイプ fifo は、その名のとおり、「早い者勝ち」でデータを取得した方にしかデータが流れないんでしょうか。 誰かがデータを読むということは、パイプからデータを取り出してしまうと言うことです。無くなったデータは読めません。 >Q2) その場合、親子関係なくプロセス間で、複数のプロセスに対して同一の文字列をブロードキャスト方法は、どのようにすればスマートでしょうか。 複数のプロセスというのが、最初から決まっている物ならその相手プロセスごとに別々の名前付きパイプを作るのが簡単です。 複数のプロセスというのが、動的に増えたり減ったりするならば、 案1:ファイルやデータベース、共有メモリなど、読んでも無くならない物を使う 案2:相手プロセスが増減するたびに、専用の名前付きパイプを作ったり削除したりする処理を作り込む 案はまだありそうですけど。

sumire_kanou
質問者

お礼

ありがとうございます。大変勉強になりました。

関連するQ&A