丁度forkとプロセスの話が出ているので便乗質問。

パイプを使って対話型のプログラムを親プロセスから
操作したいと思ってテストプログラムを作ったのですが
うまくいきません。

子供はfgetsでループして取ってきた文字列をstdoutに出力
するという単純なプログラムです。親はforkして以下の図の
ようになるようにpipe処理をした後、適当な文字列をwrite
して直後にreadしています。

+------+ +------+
|親  |---(stdin)-->|子  |
|   |<--(stdout)--|   |
+------+ +------+

最終的な理想は、親が子にさまざまなコマンドを発行して
操作し、結果を取得するということをアプリケーションが
終わるまで行うことです。

テストプログラムではreadした瞬間止まってしまっているようなの
ですが双方向パイプでコマンドと対話するのはなにかコツの
ようなものが必要なのでしょうか?。

テストで作った子(メッセージ欄に貼り付け)と親プログラム(添付txt)
のソースは以下のURIにあります。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=1344