Next: Local Functions
Up: A sample implementation
Previous: 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
平成13年3月7日