next up previous
: Local Functions : A sample implementation : Command Line Arguments

パイプを利用した接続

oxc はオプション -h が指定されないときには、コマンドラインで与えら れるべき情報を、標準入力から得ようとする。ここでは、この機能について説明 する。まず、標準入力から受け取るデータは次の形式をしていなければならない。
int32 port String hostname byte 0 String password byte 0


String は C のストリングではなくて、cmo_string のような、長さ付きの ストリングである。

データの例:
port = 1324 = 0x052c, hostname = ``orange'', password = ``hogehoge'' の場合

00 00 05 2c 00 00 00 07 6f 72 61 6e 67 65 00 00
00 00 09 68 6f 67 65 68 6f 67 65 00

さて具体的な起動プロセスは次の通りである。

  1. クライアントは pipe(2) を用いて、ファイルディスクリプタ fd0, fd1 を 手にいれる。
  2. fork(2) で子プロセスを生成し、子プロセスは dup2(fd1, 0) を実行する。 これで 親プロセスの fd0 と子プロセスの 0 が接続されている。
  3. 子プロセスは exec("ssh remotehost controlserver") としてリモートプロセ ス起動する。このとき、親プロセスの fd0 とリモートプロセスの 0 が接続さ れている。
  4. この通信路はリモートプロセスからは標準入力として見えている。 リモートプロセスは標準入力から既に述べたフォーマットにしたがってデータを 読み込む。リモートプロセスは、そのデータを用いて connect(2) を実行する。



Nobuki Takayama 平成17年2月10日