• 締切済み

cat

プロセス間通信をしたいのでが、まず mknod mypipe p でpipeを作成後 送信側プロセスで echo "hoge" > mypipe& でpipeに送信。 ブロッキングを回避する為に バックグラウンド処理にしています。 受信側プロセスでは cat < mypipe >> hogehoge.file でファイルに保存しています。 この受信側プロセスでのcatのブロッキングを 回避する方法って無いのでしょうか? (ひょっとしてcatはEOFを待ってます?) よろしくお願い致します。

みんなの回答

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

#1です。 >この無限ループは10秒周期で実施されていて処理A、処理Bは定周期的に実行したい処理でもあります。 やっぱりそんな感じですか。でも質問に書いてない事は答えようが無いので。 パイプへの入力と無関係にA,Bを10秒周期で実行したいのであれば別々にループをまわせばいいので、要件は「パイプの入力があれば即座に、無くても遅くとも10秒後には実行したい」ということですよね?こんな感じでどうでしょう?(全角空白で段つけしてますのでコピペするなら注意) while true do (sleep 10; echo -n > mypipe)&  pid=$!  data=`cat mypipe`  kill $pid 2>/dev/null  case "$data" in  "") echo NO DATA in 10sec ;;  *) echo data is "$data" ;;  esac done

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

>(ひょっとしてcatはEOFを待ってます?) EOFというかパイプがデータで一杯になるかクローズされるまで待ちますが、echo は hoge を書いたらすぐ出力をクローズして終了するので cat も終了すると思います。 つまりブロックはされるがすぐ終了します。

f_attck
質問者

補足

御回答ありがとうございます。 送信側のechoは、不定期に発生するものだと考えていただけないでしょうか。 処理的には、受信側のcatは無限ループの一文で、 while true do cat ..... ....A ....B sleep 10 done のような処理をしております。 この無限ループは10秒周期で実施されていて処理A、処理Bは定周期的に実行したい処理でもあります。 そこで、送信側のechoが発生しない場合にもこの周期でループをまわす事は可能でしょうか?

関連するQ&A