• ベストアンサー
※ 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% (4856/10272)
回答No.2

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

sumire_kanou
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • シェルのリダイレクトとパイプについて

    シェルのリダイレクトとパイプについての質問です. リダイレクトでコマンドの標準出力をファイルに指定した後に, パイプを置いて,もう一つコマンドを並べたとき, 後の方のコマンドの標準入力はどうなるのでしょうか? 例えば, ls >outfile |cat ならば, catの標準入力には,何も入ってこないと思うのですが, これを実行すると,lsの結果がoutfileに書き込まれ, 次のプロンプトが表示されます. 普通,catを引数なしで実行すると, EOFが入力されるまで,入力待ちになると思うのですが, こうならないのは,シェルがcatの標準入力にEOFを入力したからだと 考えていいのでしょうか. よろしくお願いします. (質問の意味が分かりにくければご指摘下さい.)

  • UNIX_Cにおける「名前つきパイプ(FIFO)」のcloseとunlinkについて教えてください

    親プロセスと子プロセスで、「名前つきパイプ(FIFO)」を用いて、インターフェースを行う場合。 closeとunlinkで処理を終了させたいのですが、open時に一つのFIFOにつきreadとwriteの二つのIDが得られます。この二つのIDで必ず各々closeをしなくてはならないのか?または、一つのIDで一回closeを行えばよいのか? 回答をお願いいたします。

  • awkで可変文字列をマッチング

    シェルなどでawkを使う際に、シェルの引数として渡された文字列をawkに渡し、それを条件にマッチングをかけたいのですが、どうしたら良いのでしょうか?(まあ、素直にgrepを使えばいいのですが・・・) 例えば、 cat foo.txt | awk '{if ($2 == ptn) print}' ptn=$<シェルの引数> とかやれば、2番目のフィールドに完全に一致する行が抽出できるのですが、 cat foo.txt | awk '/ptn/ {print}' ptn=$<シェルの引数> とかやっても、"ptn"という文字列をマッチングしてしまうので、うまくいきません。どの位置に出現するかわからないけど、シェルの引数で指定された文字列が含まれている行だけを出力したい場合、どうしたらよいのでしょう・・・。

  • シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入

    こんにちは。 シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入したいと思います。 ・sample.txt (挿入前) -- <ABC> <ABC> Hello! </ABC> </ABC> -- ↓ ・sample.txt (挿入後) -- <ABC> <ABC> Hello! </ABC> Good Morning Good Evening </ABC> -- 上記のように、テキスト末尾から検索して、 はじめて表れた"</ABC>"のタグの前に、 Good Morning Good Evening という2行の文字列(無理なら1行でも)を追加したいと考えています。 "</ABC>"タグは2つありますが、末尾から検索して初めて表れたもののみ対象です。 このような操作を行うには、 どのようにシェルを組み合わせれば良いのでしょうか? grepやsedを用いて考えてはいますが、よく分かりません。 (grepで末尾から初めて表れた"</ABC>"の行番号を取得し、 その上に、sedで文字列を挿入するなどですが・・・よく分かりません) どなたか、よろしくお願いします。

  • シェルの文字列取得について

    シェル(Bash)の文字列取得についてご教授ください。 文字列:  test(12345) 上記の文字列から"12345"(括弧内の数値部分)を取り出し、変数へ格納する場合、どのように行えばよいのでしょうか? ちなみに1桁だったり2けただったりと数値の桁は変動します。 よろしくお願いします。

  • find結果で文字列検索?

    RedHatLinux7.2です。 シェルコマンドで複数のテキストファイルからある文字列を含むファイルだけリストアップしたいのですが、文字列検索の対象となるテキストファイルが色々なディレクトリにまたがっている場合はどうやってやればよいでしょうか? 多分findで抽出したファイルパスをgrepに渡せばいいんでしょうけどパイプとか?がまだ不勉強ですぐにわかりません。 初歩的なことだと思いますがよろしくお願いします。

  • phpヒアドキュメントスクリプトを実行する

    bashシェルスクリプトは例えば test.sh: #!/bin/sh phpscript=`cat <<'EOF' $x=2; $y=3; $z=$x+$y; echo "{$x}プラス{$y}イコール{$z}。\n"; exit; EOF ` php -r "$phpscript" と書けますが1行少なくするために 文字列変数$phpscriptを使わないで 最後の php -r "$phpscript" と phpscript=`cat <<'EOF' をまとめて test.sh: #!/bin/sh php -r `cat <<'EOF' $x=2; $y=3; $z=$x+$y; echo "{$x}プラス{$y}イコール{$z}。\n"; exit; EOF ` としても機能しません 1行少なくするためにはどのように書けばよいのでしょうか? よろしくお願いします

    • ベストアンサー
    • PHP
  • エクセルの文字列検索で何番目の$の位置?

    たとえば、$A$1:$AG$25とか$AB$100:$AG$2550という文字列から、 1.文字列末尾の数値を取得する関数はあるでしょうか? 2.3番目の$の位置、4番目の$の位置を取得できる関数はあるでしょうか?

  • Cシェルで、文字列中(str)に、固定文字列(abc)の数を数える方法

    Cシェルで、文字列中(str)に、固定文字列(abc)の数を数える方法を教えてください たとえば、 set str = abcdabceabcd set abc = abc str中に、abcを現れる数(3)を求める方法を教えてください Cシェルは詳しい方がいらっしゃいましたら、是非教えてお願いいたします

    • ベストアンサー
    • AJAX
  • 文字列をSVGにしたい。

    文字列をSVGにしたいのですが、今の所私の知識ではイラストレータで文字を打って、SVGで書き出す方法しか思いつきません。 この一連の動作をlinuxサーバー上でPHPやシェルスクリプトで自動でおこないたいのですが、なんか方法ありますか?