- 締切済み
cat
プロセス間通信をしたいのでが、まず mknod mypipe p でpipeを作成後 送信側プロセスで echo "hoge" > mypipe& でpipeに送信。 ブロッキングを回避する為に バックグラウンド処理にしています。 受信側プロセスでは cat < mypipe >> hogehoge.file でファイルに保存しています。 この受信側プロセスでのcatのブロッキングを 回避する方法って無いのでしょうか? (ひょっとしてcatはEOFを待ってます?) よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
#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)
>(ひょっとしてcatはEOFを待ってます?) EOFというかパイプがデータで一杯になるかクローズされるまで待ちますが、echo は hoge を書いたらすぐ出力をクローズして終了するので cat も終了すると思います。 つまりブロックはされるがすぐ終了します。
補足
御回答ありがとうございます。 送信側のechoは、不定期に発生するものだと考えていただけないでしょうか。 処理的には、受信側のcatは無限ループの一文で、 while true do cat ..... ....A ....B sleep 10 done のような処理をしております。 この無限ループは10秒周期で実施されていて処理A、処理Bは定周期的に実行したい処理でもあります。 そこで、送信側のechoが発生しない場合にもこの周期でループをまわす事は可能でしょうか?