2006/02/15

UNIXの流儀

ようやく昨日の夜、クライアントからサーバを経由して主筆が起動できるようになった。それに、ちゃんと「主筆」やサーバで標準出力や標準エラー出力にデータを書き込んだときにも、クライアントを起動した端末エミュレータにそのデータが表示されるようにすることができた。まぁ、まだ異常系の処理はまったくできてないけど。

後は、主筆側でファイルを開くときや名前を付けて保存するときにそのことをサーバに通知することと、既存の主筆を必要に応じてアクティブにする処理が残っている。ようやく道半ばと言ったところか。

ここまで来るのには、いろいろと紆余曲折があった。例えば、exit()したときnew したオブジェクトのデストラクタが実行されない(あたりまえ)ということで一時間ばかり悩んだり、おととい自分が書いたコードが何をやってるのかわからなくなって悩んだり。もう、俺はアホかバカかと。

まぁそれはいいとして、現状では上に書いたとおり異常系の処理はほとんどまともにはできていないし、一度も動かしていない。だが、早いうちに作っておきたい例外的処理もある。デバッグがしにくくてかなわない。

そのうちの一つが、execをwaitする方法だ。

他のプロセスを起動するには、あたりまえだがfork()してexec()しなければならない。しかしそのときに、子プロセスでexecが失敗したことを親プロセスは一体どうやって知ればいいのだろうか。子プロセスのexit()はwait()で待ち合わせることができるのだが、単純にwait()するとexec()が成功した場合親プロセスは子プロセスが終了するまでずっと待ちつづけることになるはずだ。だがそうではなく、子プロセスがexec()するかあるいはexit()するまで待つにはどうしたらいいのだろうか。

今までWindowsでやってきた(その前はN88-BASICだったなぁ)せいか、どうにもUNIXでの流儀がよく判らない。googleとかで検索しても、ここへんの「常識」についてはなかなか書いてなかったりする。

さすがに焼付け刀ではそろそろ辛くなってきた様に思う。まじめのその手の本の一冊でも買って勉強するべきなんだろうが。

0 件のコメント: