fixedpoint.jp


tex-make.c でのパイプを使った IPC (2007-01-16)

500ページ以上あり持ち歩くのに向かないというのが数少ない欠点の「UNIXネットワークプログラミング〈Vol.2〉IPC:プロセス間通信」は、IPC の1つの形態として真っ先に "パイプ" を挙げています。

他の形の IPC と比較した場合パイプにある制限について、

パイプは名前を持たず、その結果、共通の親プロセスを持つプロセス間でしか使用できないという最大の欠点を抱えている。(中略)(ディスクリプタパッシングを考えない場合。)

と述べています。この点でパイプは FIFO より不便といえますが、一方、限られたプロセスにのみコミュニケーションを許すという意味で無用な複雑さを避けることができます。

実際の例の1つとして、Kpathsea という TeX の構成ファイルを検索するためのライブラリに含まれる tex-make.c を見つけました。TeX Live や teTeX-3.0 に含まれています。

tex-make.c で定義されている静的関数 maketex() は、別のプログラムを呼び出す(exec)ことを子プロセスに任せ、前もって用意しておいたパイプでその結果を入力として受け取ります。こうすることで関数内に別プログラムの行う処理を閉じ込めています。

また、この処理は Unix 向けと WIN32 向けに併せて組まれており、互いのコードを比較するのも面白いです。


© 2006-2023 fixedpoint.jp