ロプログラミンク・テクニック 多治見寿和 telnetd ( 2 ) 前回は telnetd プログラムをとりあげ、 telnet コマン ドによるサ→ヾーへの接続要求をどのように受理するかに ついて説明しました。 telnetd は inetd の利用を想定し て言されたプログラムなので、自分で接続を受け付ける 必要はありませんが、テンヾッグ用として接続受理のための コードも用意されています。 また、 inetd を利用して起動する際に、 IPv4 と IPv6 を男嚇固に扱えるようにするガ去を紹介しました。たん 0 ンヾ イトストリームが必要なアプリケーションでは IPv4 と IPv6 を区別しなくてもよいので、プログラムを inetd か ら起動 - す - るようにしておけは、どちらのプロトコルでも通 信できます。しかし、プロトコルに依存した処理が必要な プログラムもあるため、どちらか一方の接続要求だけを受 理するガ去も説明しました。 今回は、 telnetd の全ー冓造をみながら、 telnet コマン ドでの処理が telnetd プログラムではどのように処理され ているかについて説明します。 ます、 telnetd プログラムがユーザーのリクエストを実 現するイ督はみから紹介しましよう。 ューサーからの接続要求を受理すると、 telnetd プログ ラムは fork システムコールを実行し、自分自身を 2 つの プロセスに分けます。子プロセスでは、イ應課端末のスレー フ端をオープンし、自分自身は 1 。 g ⅲプロセスに置き換わ ります。これが、ユーサーによる入力カ鍍されるプロセス になります。想端末を利用しているのは、端末ライン・ ディシプリンから操作される形態にするためです。これは 3 月号でも説明したように、 login コマンドやあとて起動 telnetd の動作 UNIX MAGAZINE 2002.6 図 1 telnetd の全イ告 ネットワーク ー elnetd tel net 仮想端末 テ、マ・テス ノヾスノヾレ イタイー スースプ シェ丿レ するシェルに対し、相手が通常の端末であるとみせかける のが目的です。 親プロセスのほうは、仮想端末のマスター端をオープン し、子プロセスに入力を渡す準備をします。ューサーカリ 用しているホストとの通信もこのプロセスが処理します。 つまり、親プロセスは、ネットワークから読み込んだも のをイ反想端末に書き込み、保想端末から読み込んだものを ネットワーク側に書き込むという動作をおこないます。 main 関数 配列に注目します ( 誌面の都合上、で折り返していま その則に、 main 関数の直前で旦言されている valid-opts の main 関数は、 telnetd. c ファイルに言当されています。 く main 関数からみていきましよう。 telnetd プログラム る telnet コマンドのコードと上交していきます。さっそ 今回は、 telnetd のソースコードを参照しながら対応す char valid—opts ロ す。以羽司様 ) #ifdef #ifdef #endif AUTHENTI CATI ON SecurID 77
べます。すべての可能を調べてもよさそうですが、 tel- netd では次のように、バッフアの空き状態などから調べ るべきファイル・ディスクリプタを決定しています。 if (nfrontp ー nbackp Ⅱ pcc > 0 ) { FD_SET(f , &obits) ; } else { FD_SET(), &ibits) ; nfrontp ー nbackp が 0 以、タ ) 値になる場合は、クラ イアント側に送出するためのキューか空ではないことを意 味します。また、 pcc が 0 より大きな値となる場合は、仮 想端末側から読み込んだバッフアにデータか残っているこ とを意味します。このようなときには、ネットワーク側に 送出できるかどうかだけを調べます。これらの条件カ城り 立たない、つまりクライアント側に送出するためのキュー が空で、イ反想端末側から読み込んだバッフアにもデータが 残っていない場合には、イ反想端末側から言囚みか可能かど うかを調べます。 さらに、クライアント側とイ反想端末側を逆にした検査も 必要です。 if (pfrontp ー pbackp Ⅱ ncc > 0 ) { FD_SET(), &obits) ; FD_SET(f , &ibits) ; } else { このコードでは、イ反想端末側に送出するためのキューに データか残っていたり、ネットワークから読み込んだバッ フアにデータカ戯っている場合には、イ反想端末に書き込め るかどうかを調べます。これらの牛カ艚たされないとき は、ネットワーク側に読み込むべきデータがあるかどうか を調べます。 telnet コマンドでは、このさまざまな場所からの入力 をうまく処理するために、リングバッフアを使って制御 していました。これに対し、 telnetd ではリングバッファ などのネ隹なデータ構造は利用していません。データ構造 といえそうなのは、ネットワークとイ廨端末に対する出力 をイ尉寺するキューだけです。しかし、実際にはどちらも同 しような処理が可能です。これは、 select システムコール に与える FD-SET の違いによるものです。 telnetd では、 すでにデータがある場所には言囚みをおこなわないという ガ去をとっています。そのため、一度データを読み込んで 82 も、次に同し場戸励、ら読み込むときにはかならずデータは 空になっているはすです。したがって、データを読み込む 際には石呆した領域の : 麪頁から読み込むことが可能になっ ています。これが、プログラムか簡単になっている大きな 理由です。 データを入力バッフアに読み込んだ場合、ます端末の設 定変更が必要かどうかを調べます。設定の変更が必要で、 かっ telnet とのあいだて端末の設定をクライアント側で おこなうという合意がとれている場合には、その情報をク ライアント側に渡さなければなりません。このような場合 には必要な 1 辭長をまとめ、クライアント側に送出するキュ ーに登録します。特殊な処理カ坏要なデータの場合にも、 ノヾイナリモードでの転送が可能かなどを調べながら、イ反想 端末側の入力バッフアからクライアント側への出力キュ に移動していきます。 なお、このループは無限ループとなっていますが、クラ イアント側や反想端末側からの言囚みにおいて EOF を読 み込んだ場合にはループを終了し、 telnetd プログラムも 終了します。 ☆ 今回は、 telnetd プログラムにおいて、これまでに紹介 してきた telnet コマンドでの処理に対応する部分がどの ように実現されているかという点に注目して、 telnetd の ソースコードを解説しました。 telnet ではリングバッフアを利用していた部分も、 tel- netd では 1 つ刎反定をおくことで簡単なコードとなって います。 プログラミングの際には、すべてのケースをカバーする のではなく、このように妥当なイ反定を 1 つ設定するだけで プログラムを簡ヒできることがよくあります。その点を 理解していただけたでしようか。 ( たしみ・ひさかす ) UNIX MAGAZINE 2002.6
特殊なコメント 1 を記述するとともに、 ma ⅲ関数を終了 する return 文を記主しています。 doit 関数 80 telnet 関数 1 こク帯朱なコメントは lint コマンドか第得 ( します。 ワークの先のクライアント、第 2 引数がイ反想端末とつな す。この関数は 3 つの引数をとり、第 1 引数がネット telnet 関数は、サービスを提供するための中枢部分で 使われています。 こでも特殊なコメントである NOTREACHED が /*NOTREACHED*/ telnet (net , pty , remote—hostname) ; net 関数を呼び出して実際の処理をおこないます。 さらに、環竟変数の琪月化などをおこなったあと、 tel- を取り除くために trimdomain 関数を呼び出します。 されたホストなどの場合にはローカルなドメイン名の部分 ト名はドメイン名もすべて含む FQDN で、 LAN に接続 るバッフアにホスト名をオ褓内します。ここて得られるホス ホスト名を取得するための関数で、あらかし寉保してあ sa 関数を利用しています。これは sockaddr 構造体から 文字列として取得します。この処理には realhostname- イ反想端末をオープンしたあとは、接続先ホストの名前を レープテパイスの名前を外部変数の line に槲内します。 ル・ディスクリプタを戻り値とするとともに、対応するス 末のマスターテンヾイスをオープンしたときに、そのファイ 端末のマスターデバイスをオープンします。また、イ應課端 います。この関数は、 3 月号で紹介したようなガ去てイ廨課 しディレクトリにある sys-term. c ファイルで定義されて めに呼び出すのが getpty 関数で、これは telnetd. c と同 この関数では、ます仮想端末をオープンします。そのた struct sockaddr *whO ; doit ( w れ 0 ) VOid 後て取得したクライアントの情報てす。 ましよう。 doit 関数の引数は、さきはど main 関数の最 次に、 main 関数から呼び出される doit 関数をみてみ がったファイル・ディスクリプタです。第 3 引数には、 クライアント・ホストの名前カ蚊字列として渡されます。 void telnet(f , p, host) int f , p ; char *host ; この関数では、ます telnet クライアントとのあいだで いくつかの合意をとりつけます。 telnetd プログラムでは、 このように接続先の telnet コマンドがどのような機能を もつかを調べ、その機能に応した処理をおこないます。 の一連の処理カ鮗ると、 ioctl システムコールを使って、 2 つのファイル・ディスクリプタがノンプロッキング I / O をおこなうように設定します。 (void) ioctl(f , FIONBIO, (char *)&on) ; (void) ioctl(), FIONBIO, (char * ) & 0 Ⅱ ) ; こで利用している on という値は telnet 関数の : 麪頁 で宣言さ 1 に初期化されています。 ioctl の呼出し時 に直接この値 ( 1 ) を指定できれば便利ですが、このよう なコードになっているのは、 ioctl は値を返すこともある ため、かならす値をいったん変数にオ哿内してそのアドレス を指定しなければならないからです。ただし、 ioctl を使 って値を設定する場合はこの変数の内容は変更されないた め、上記のようにそのまま別の呼出しに利用することがで きます。 帯域外データを通常のデータのなかに埋め込むことが可 能な場合は、そのソケット・オプションを指定するために setsockopt システムコールを呼び出します ( 図 2 ) 。 図のように、 endif の行に対応する if の行や ifdef で指 定された条件をコメントとして書いておく例はよくみかけ ます。こうしておけは、大きな ifdef プロックなどではプ ロックの範囲が分かりやすくなります。 次に、各重シグナルハンドラを設定して、端末に関する 情報を取得しています。処理しているシグナルとしては、 SIGTSTP 、 SIGTTOU 、 SIGCHLD があります。 tel- netd は、実際には茁妾続された端末がない状態で動作 するため、端末関係のシグナルを無視していますし、子プ ロセス ( サービスを提供するためのプロセス ) の終了時に は後始末をしなければならないので、そのための cleanup 関数をシグナノレ、ンドラとして登録しています。 UNIX MAGAZINE 2002.6
#endif す。一方、 telnetd プログラムでは、 getopt 関数に渡す オプションを検出したというデフォルトの動イ乍を実行しま ない ( 無効な ) ものがあれば処理をおこなわす、未定義の ンカ甘旨定されます。そして、オプションの角芋に存し ンドでは、 getopt 関数への引数としてすべてのオプショ は getopt 関数の引数として利用されます。 telnet コマ 変数名を見て分かった人も多いと思いますが、この配列 段階で有効なオプションのみを指定しています。 #endif し、その定義は見慣れないものかもしれません。 数として整委と文字列へのポインタ型をとります。ただ ー勺な main 関数と変わらす、 int 型を戻り値とし、引 それでは、 main 関数をみていきましよう。関数自体は という機能により、 2 つの文字列が連結されます。 、、連続した文字列は、それらを連結した文字列として扱う " 外の場合は出力しません。出力時には、 C のコンパイラの の両方カ症義されていれば [-P policy] を出力し、それ以 このコードは、 IPSEC と IPSEC-POLICY-IPSEC " [host—name Cport] ] " " [—P policy] " defined(IPSEC_POLICY_IPSEC) #if defined(IPSEC) & & 理を受け持っ関数には、次のようなコードがあります。 もおこなわれています。 telnet コマンドの Usage 出力処 同様の処理は、 telnet コマンドの Usage 出力の部分で 文冽として扱えるようにしています。 配列として処理されるので、最後の要素に \ 0 を配置して、 るようにしています。なお、 valid-opts 酉改」は文字型の 字を追加し、 get 叩 t 関数がこれらのオプションを角財斤す ます。このため、 valid-opts 酉リに a と : 、 X と : の 4 文 ている場合、引数をとるオプションの a と X が追加され たとえは、 AUTHENTICATION マクロが定義され char *argv ロ ; main(argc , argv) int 78 宣言が省略されているためです。この定義は、次のものと これは K&R 形式で宣言されていて、さらに整数型の まったく同一です。 int main (int argc , char *argv ロ ) K&R 形式では、関数の引数か整数型の場合、その宣 言を省略することかできます。実際には、プログラムの読 みやすさなどを考慮して明示的に宣言するケースが大半だ と思いますが、上記のように定義されている場合もあるの で、旧いプログラムを読む際には注意してください。 main 関数の地直では、バッフアの初期化をおこなって います。 pfrontp = pbackp = ptyobuf ; netip = netibuf ; nfrontp = nbackp = netobuf ; こでは 3 つのバッフアを用意しています。 ptyobuf は、仮想端末に書き込む ( 子プロセスに渡す ) データを 保持するためのバッフアです。このバッフアはキュ (FIFO) のように利用します。キューの末尾 ( データを追 加する点 ) をま - のが pfrontp 、キューの麪頁 ( データを 取り出す点 ) を孑嗣ーのが pbackp です。つまり、 pbackp から pfrontp までにオ内されているのがキューの内容と なります。 一方、 netobuf はネットワーク側に書き込む ( ューザー に提示する ) データ &f 尉寺するためのバッフアです。 ちらもキューのように利用し、キューの末尾を指すのが nfrontp 、キューの知頁を指すのが nbackp です。 netibuf は、ネットワーク側から読み込む ( ューサーか らの入力を読み込む ) ためのバッフアです。 ptyobuf や netobuf とは異なり、キューとしてではなくたんに領域 を確保するために利用されます。そのため、次に読み込む べきデータの位置を示す netip というポインタのみが用 意されています。さらに、こでは初期化されていません が、イ反想端末側から読み込むための ptyibuf というバッ フアもあります。 次はオプションの解析です。この部分は通常どおり、 getopt 関数を使ったループとなっています。もちろん、 第 3 引数にはさきほどネ加月化した valid-opts 配列を指定 しています。 while ((ch = getopt(argc, argv, valid-opts) ) - switch(ch) { UNIX MAGAZINE 2002.6
プログラミング・テクニック 図 2 setsockopt システムコールの呼出し defined(SO_OOBINLINE) #if (void) setsockopt (net , SOL—SOCKET , SO_OOBINLINE , (char *)&on, sizeof 0 Ⅱ ) ; #endif / * defined(SO_OOBINLINE) * / 端末の情報の取得には getent 関数と Getstr 関数を利 用しています。これらの関数は telnet ライプラリのなか で定義されており、それぞれ cgetent 関数や cgetstr 関 数を呼び出します 2 。これらは termc 叩形式のデータベー スからエントリを取り出したり情報を取得したりするため の関数で、データベースとして /etc/gettytab を利用し ています。ここでは、次のような 4 つの情報を取得してい ます。 he : ホスト名編集文字列 hn : ホスト名 im : ノヾナーメッセージ if : プロンプトの前に表示するファイル バナーメッセージには、 if でファイルカ甘旨定されていれ ばその内容が、 if カ甘旨定されていない場合は im 旨定さ れた文字列が使われます。また、これらの文字列に % h と いう文字列カまれる場合、それがホスト名に展開されま すが、 hn カ甘旨定されていればその値がホスト名として使 われます。指定されていない場合は、本来のホスト名カイ吏 用されます。いすれの場合も、ホスト名はホスト名編集文 字列により多少刎正を加えることができます。 これらの処理に続いて、プログラムのソースには次のよ うなコードがあります。 DIAG (TD_REPORT , {sprintf (nfrontp, "td: Entering processing loop\r\n" ) ; nfrontp + = strlen(nfrontp) ; } ) ; こて利用しているマクロ DIAG は、 telnetd. h で次 のように定義されています。 #ifdef DIAGNOSTICS #define DIAG(a,b) #else #define DIAG(a,b) #endif if (diagnostic & (a) ) b 2 telnet ライプラリのソースコードは /usr/src/lib/libtelnet に置か れており、ここて利用している関第はこのディレクトリの getent. c ーファイルて発義されています。 UNIX MAGAZINE 2002.6 つまり、 DIAGNOSTICS が定義されていなければこ の部分には何も展開されませんが、定義されている場合は 次のように展開されます。 if (diagnostic & (TD—REPORT) ) { nfrontp + = strlen(nfrontp) ; processing 100P \ て \ n " ) ; sprintf (nfrontp , "td : Entering きに、それを who コマンドなどで市忍できるようになり れにより、ネットワーク経由でユーサーがログインしたと す。はかには、 utmp ファイルの更新もおこないます。 をおこない、そうでなければ 1 。 g ⅲプログラムを起動しま ンの設疋か有効になってい川まパスワードのチェックなど 理の実行をおこないます。ログイン処理では、自動ログイ でのイ應課端末のスレープデバイスのオープン、ログイン処 この関数では、子プロセスの生成、生成した子プロセス startslave (host , 1eve1 , user_name) ; 数です。 成します。そのために呼び出しているのが startslave 関 たりューサーのシェルを重川乍させるための子プロセスを生 テンヾッグ出力のあとは、実際にログイン処理をおこなっ などでよくみられます。憶えておいて損はないでしよう。 ます。このようなマクロの使い方は、とくにテパッグ出力 り、この文字列がユーザーの端末に表示されることになり td: Entering processing loop カ旦加されます。つま これにより、クライアントに送信される文字列として、 ます。 メインループ 81 端末側から読み込んだり書き込んだりできるかどうかを調 select システムコールを使って、ネットワーク側やイ反想 す。メインループは無限ループになっています。ここでは ログイン処理がすんだら、残るはメインループのみで
オプションの角財斤では、 debug オフションを処理する 部分ですこし朱なことをしています。 getopt 関数を使 う場合、オフションは 1 文字のものしか認識できません。 これは getopt 関数の信様なので変えられません。しかし telnetd では、この debug だけか文字列のオプションと して定義されています。 -debug ではなく -d にすれば簡 単なのですが、このようにした理由はよく分かりません。 telnetd プログラムの作者はこの問題の解決策として、 getopt 関数に対しては一 d オプションのみを定義し、そ れに ebug という引数が付いているかどうかを調べるガ去 を採用しています。 getopt 関数では、オプション窈日疋 時に d : と言当すれば、 -d を引数をとるオプションとして 定義することができます。この機能を使って、 -debug が 指定されたときに、 -d オプションとその引数として文字 列 ebug カ甘旨定されているかどうかを調べています。 case ) d : if (strcmp(optarg, "ebug") debug + + ; break ; usage() ; / * NOTREACHED * / bre ak ; 上のコードを見ても分かるように、オプションとして -d カ甘旨定されたときはその引数を調べ、 ebug であれば debug オプションカ甘旨定されたとみなします。引数がそ オび人タ ) 文字列の場合は、誤ったオプションカ甘旨定されて いると判断し、 Usage 出力を出力してプログラムを終了し ます。 ただし、 getopt ライプラリ関数を利用していることで イ I' 合な部分はどうしても出てきます。たとえはこのコー ドでは、—d ebug と指定したときにも debug オプショ ンカ甘旨定されたと認識してしまいます。もっとも、普通の 使い方でこのような指定をすることはます考えられないの で、これでよいのかもしれません。 オプションの解析か終ると、 debug オプションカ甘旨定 された場合の処理か読きます。前回紹介したようにこの 部分のコードでは inetd から起動するのではなく、自分自 身でソケットを用意して接続を受理するための処理をおこ ないます。この処理を終えた時点で、ファイル・ディス クリプタの 0 が、受理したネットワークの孑を表すディ スクリプタとなっています。これは、 inetd から起動した UNIX MAGAZINE 2002.6 プログラミング・テクニック 場合も、 debug オプション付きて起動されて接続を受理 した場合も同じです。 次に、 openlog ライプラリ関数を使ってログの準備を します。 openlog ( "telnetd" , LOG—PID ー LOG—ODELAY , LOG_DAEMON) ; telnetd では、ログの名前を telnetd 、ファシリティを daemon とすることが分かります。ファシリティはログ の不頁を指定するもので、システムのデーモン・プログラ ムも daemon を利用しています。 次は接続元の情報の恥等です。凾に考えると、 accept システムコールの段階で相手側の情報か陬得できるのに どうしてここでまた取得するのだろうと疑間に思うかもし れません。 telnetd では、自分で accept するだけでなく、 inetd からクライアントと接続した状態て呼び出されるこ ともあります。このどちらの場合にも正しく重川乍するよう に、 accept の段階で得られる情報は使わす、ここで新た にクライアント窈青報を取得するわけです。 fromlen = sizeof (from) ; if (getpeername ( 0 , (struct sockaddr * ) &from, -exit(l) ; warn("getpeername") ; &fromlen) く 0 ) { 79 警告を出さないように、 / * NOTREACHED * / という doit は終了することのない関数ですが、コンパイラが return(O) ; / * NOTREACHED * / doit ( (struct sockaddr * ) &from) ; ます。 理をおこなう doit 関数を呼び出し、 main 関数は終了し こて取得したクライアントの情報を使って、実際の処 数のアドレスです。 体 ) のアドレスと、その構造体のサイズをオ褓内した整数変 はこれに類する特定のプロトコルに依存したアドレス構造 様の値を指定します。つまり、 sockaddr 構造体 ( もしく ます。第 2 、第 3 引数には、 accept システムコールと同 取得したいクライアントか接続しているソケットを指定し リ関数を利用します。この関数の第 1 引数には、情報を クライアント情報の取得には getpeername ライプラ
朝公公 2 三 0 Contents 2002 / 6 特集 し inux のブートプロセスをみる 31 白崎博生 -32 CPU の保護機能、割込みと例外 連載 UNIX Communication Notes ・・・・・山口英 電子図書館への道 ( 2 ) 旧 6 の実装・・・・・・島慶ー 近隣探索の処理 プログラミンク・テクニック・・・・・・多治見寿和 telnetd ( 2 ) JavaServer Pages " ・・・・荒井美千子 JavaBeans の利用 ( 3 ) 新・倉敷芸術科学大学のネットワーク構築・・・・・小林和真 Network Attached Storage (Connex N 1 OOO&POP-nasC) シェルの魔術・・・・・・森島直人 ファイルとバーミッション ( 2 ) BSD をハックする・・・・・・齊藤明紀 ステータス表示器 ( 4 ) Let ・ s PIay with UN ー X ・・・・・・四本淑三 コヒーできない CD RFC ダイジェスト・・・・・・宇夫陽次朗、小柏伸夫 55 63 77 83 94 103 126 COVER, CONTENTS DESIGN, ILLUSTRATION ・ MORIYA, KAZUO (AUDREY THE DESIGN)
0 つのために作成したプログラムを別のコマンドシェル上で 実行すると、まずコマンドシェル・プログラムか起動し、 その後に指定したプログラムカ躾行されます。たとえば、 cmd. exe のプロンプトから w32console 用にコンノヾイル されたプログラムを実行すると、最初に w32console か起 動してウインドウが表示さ続いて指定したプログラム の実行結果か表示されます。 ConsoIe 用にコンパイルされ たプログラムを w32consoIe から起動した場合も同様で、 最初に Console か起動してウインドウが表示さその 後に指定されたプログラムの実行結果が表示されます。 このため、それぞれのコマンドシェル用に作成されたプ ログラムを、別のコマンドシェル上で実行するのはあまり お勧めできません。 端末ソフト Handheld PC には、ダイヤルアッフ妾続で別のマシン に直接ログインするための、、ターミナル " プログラムが付 属しています。しかし、山も丘は PPP を用いて TCP/IP による接続を確立し、それから TeInet で別マシンに接続 するガ去のほうか普通でしよう。 Windows では、寺西高 氏の開発した「 Tera Term 」という端末ソフトウェアがひ ろく使われています 15 。 HandheId PC では、 Tera Term の Windows CE 版である「 pocket Tera Term 」 16 が 使えます。 このほかに、 w32console 上で動く telnet コマンドも 利用できます。この telnet コマンドでは、ホート番号を 指定した通信も可能です。 Windows CE のプログラム開発囃竟 C 言語で Windows CE のアプリケーションを開発す るには、現在のところ Microsoft カ甘是供している開発ツー ルを使う必喫があります。 従来は、 Microsoft の統合開発環境である「 Microsoft Visual Studio 」のアドオンとして Windows CE のコ ンパイラなどカ甘是供されていましたが、これらをすべて購 入すると 10 万円以 - E かかってしまうので、個人で Win- 15 昨年、ドイツて闊かれたワークショップに参加したところ、そこに置か れていたすべての Windows マシンで Tera Term カイつれていま した。冫敏トでもノ、気があるようです。 16 http://hp.vector.co ・ jp/authors/VA002416/ce/ index-ce. html 182 図 7 Microsoft eMbedded TooIs k 年“第・れ 1 0 物第地気 - ま 00 を朝 E は第地・ : 地 ・第 0 第 V 第道「ト V 第物 : rnin. c -8 いし h nin() pri ⅸイⅡ 0 ! 新つ : 0 = 0000 、 0000 、 00 、 0 、、、 00. 、 0 0 ~ - 0 ・ 0 。、一 ~ ・ =. ← 00 、 = " 0 、 ~ 0 」 C : ⅳ d 物 5 Tco 医を 21 ハト气 : 0 Ⅵ「 cl は地 V 引引 ib. h ( 332 ) : see 0 ⅵ供 & 、 : 新飛ⅸ“ yma i 工Ⅵ nin ェ ( 6 ) : 「 ni 「 C40 師 : 'min : 「 0 「 e ⅳ「 0 物 当「 e いæ. Ⅱ b ( 陸ぶ . : ′ 0 「 L 2N1 : u-. 「 t r 5 ) 最、引耘 第「 i. 。 0 dows CE のプログラムを開発するのはかなり大変でした。 一方、 Palm ではフリーの GCC でプログラム開発をお こなえますし、 CodeWarrior のような統合開発環境も数 万円で入手できます。こういったこともあって、個人の開 発者は Palm のプログラム開発環境のほうに魅力を感して いたように思います。 このような状況を破しようと考えたのか、 Microsoft は Windows CE のコンパイラと統合開発環境をすべて 含む「 Microsoft eMbedded Tools 3.0 」をフリーてま是 供しています 17 この Microsoft eMbedded TooIs は、 VisuaI Studio とはは同じ操作インターフェイスをもつ高度な開発環境で す ( 図 7 ) 。 Visual Studio や eMbedded Tools は、エデイタや プロジェクト管理など、あらゆるツールを含む GUI の統 合開発環境てす。ただし、コンパイラやリンカは独立した コマンドになっていますし、プロジェクトも UNIX のも のとほは 1 司し MakefiIe で管理する方式になっています。 したがって、端末べースのプログラムであれは、あとで述 べるように GUI をまったく使わすに開発作業がおこなえ ます。たとえは、 Emacs でプログラムや Makefile を作 成し、端末十でファイル操作やコンパイル操作をおこない ながらプログラムを開発していくことかできるわけです。 現在、 Microsoft は開発工竟を全面的に VisuaI Studio . NET に移行しつつありますが、それと並行して eMbed- ded Tools 4.0 という製品の提供も続けるのではないかと いわれています。 17 http://www.*.com/mobile/downloads/ emvt30. asp UNIX MAGAZINE 2002.6
. を 3 ・う・ 6 ・ヤ・をィイイ - ィ 3. 女子大生の課後 AirH ”で接続 UNIX MAGAZINE 2002.6 2 http://www.pc ・ panasonic ・ co ・ jp/pc/products/rl/ 1 http://www.ddipocket.co.jp/data/air.html ろいろと出費があるのです。 すが、、人は PC のみにて生きるにあらす " 、ほかにもい すと、「無男お置いしてるからやろ ~ 」とつつこまれるので で、ノート PC を新たに買うお金もありません。そうこは、 ところが、バッテリーの買替えすらままならない状態なの います。しかし、なんといっても先立つものが必要です。 は、私にとってのノート PC の条件をみごとに満たして sonic の Let's note Light2 です。 960g で 6 時間駆動 いま、そんな私の目に魅力的に映っているのは、 pana- ります。 に持ち運べません。となると、軽いノート PC か欲しくな テリーを付けると約 3kg になってしまい、これでは気軽 なります。私のノート PC は約 1.5kg ですが、大容量バッ 使うために大容量バッテリーを付けると、どうしても重く リーがどのくらいもつかが大変重要です。しかし、長時間 ノート PC でいつでもどこでも接続するには、バッテ ノをとり、コーヒー豆を買って帰りました。 はなんですが、ランチを食べ、デサートに抹茶フラベチー を注意架く選ぶ必要がありそうです。その代わりといって できたとしても、ほかのお客さんが通らないようなところ まうという悲しい出来事でした。運よくお店の電源を拝借 ソコンの電源か落ちたのはもちろん、差込みも曲がってし ルがひっかかり、コンセントから抜けてしまいました。パ になっていたところ、通りかかったお客さんの足にケープ 喫茶店のソフアに坐って電源を拝借し、チャットに夢中 る、 ・・なんていうことはできないわけです。以前、ある 春の陽射しを受けながら友達とメッセンジャーで会話す ころでしカ材妾続できないのか嘆俺点です。オープンカフェで AC アタブタなしでは動かないので、電源が近くにあると ただし、私のノート PC はバッテリーか鞘耗していて ットをするぶんにはとくに間題ありません。 CHOCOA ( IRC クライアント ) やメッセンジャーでチャ たり、ネットサーフィンをするのはかなり辛いのですが、 32K ノヾケットカ式なので、 Telnet (Tera Term) を使っ ていますが、、、圏外 " になったのは 1 回しかありません。 私 ( まり ) は、 AirH" 1 で接続しています。半年以 E 使っ あゆ . ってゆうか、なんて喫茶店でネットワークが必要に なるんよ。 そよか : ってゆうか、なんでいつでもどこでもノート PC を持ち歩いてるのよ。だいたい、喫茶店はコーヒー飲む ところやろ ? まり : ちゃうねん。友達と 13 時に伴伶をしてたとして、ふ と日 t を見たら 14 時になってたとするやん。で、、、う わ、しまった。怒りのメールが届いているんやないか なあ " とか思うわけよ。そんなとき、喫茶店にいて、か つ電源も近くにあり、 AirH ”のカードを持ってたら接 続したくなるやろ ? 接続したらしたで、今度は、、 IRC のログも見たい " とか思ったりもするんやない ? あゆ . うーん。分からん。そういう場面になったこと、な いもん。常日罸妾続にはせーへんの ? まり : 家でも常日喆妾続ゆうのはちょっと・・ あゆ : なんで ? まり : だって、大学でも京大でも家でも喫茶店でも接続し てたら、食事と寝るのとお風呂以外はす一つとパソコン に向かってることになるんやで。 そよか : 家にいるときくらいは別のことをやりたいってこ とか。 あゆ : そもそも、私は大学でしか接続せえへんし・・ ADSL 生活 この原稿を書くようになるまで、私 ( あゆ ) がパソコン を使うのははとんど哮校にいるときだけでした。したがっ て、家でのネットワークの環境にはとくにこだわりがな く、インターネットへの接続にも普通の電話回線を利用し ていました。ところが、原稿を書くようになってからはど うしても詩ヾる事柄が多くなり、接続する時間も長くなっ て、これまでの竟では耐えがたくなってきました。 あゆ : やつばり、家にも常時接続環竟がほしいなあ。 まり : それなら、いま流行りの 8Mbps にすれば ? いま までの電話回線もそのまま使えるし、イ叫リじゃない。 あゆ : でも、料金か高いんやない ? そよか : Yahoo! BB3 にすれは ? まり : 料金もそこそこやし、あゆか払える範囲やで。 あゆ : それはいいかも。さっそく申し込んでみるわ。 3 http://bb.yahoo.co ・ jp/ 111
表 12 2002 年 3 月 16 日 ~ 4 月 15 日に公開されたインターネット・ドラフトの分科会ごとの集計 ( 1 ) アプリケーション・エリア (Applications Area) 0 acap. Application Configuration Access Protocol 5 msgtrk. Message Tracking Protocol apex: Application Exchange 3 fax: lnternet Fax calsch: Calendaring and ScheduIing 2 ediint: Electronic Data lnterchange-lnternet ln- cnrp: Common Name Resolution Protocol tegration geopriv: Geographic Location/Privacy imapext: lnternet Message Access Protocol Ex- impp: lnstant Messaging and Presence Protocol tension trade: lnternet Open Trading Protocol 1 cdi: Content Distribution lnternetworking IPP. lnternet Printing Protocol ftpext: Extensions t0 FTP ldapbis: LDAP (v3) Revision ldup: LDAP Duplication/Replication/Update nntpext. NNTP Extensions P rotocols opes: Open Pluggable Edge Services ldapext: LDAP Extension prim: Presence and lnstant Messaging Protoc01 simple: SIP for lnstant Messaging and Presence provreg: Provisioning Registry Protocol Leveraging rescap: Resource Capabilities Discovery t Ⅱ 3270e : Telnet TN3270 Enhancements urn: Uniform Resource Names vpim: V0ice Profile for lnternet Mail usefor: Usenet Article Standard Update webdav. WWW Distributed Authoring and Ver- webi: Web lntermediaries S10111ng インターネット・エリア (lnternet Area) 0 itrace: ICMP Traceback 5 ipoib. IP over InfiniBand ipcdn: IP over Cable Data Network 4 dnsext: DNS Extensions ifmib. lnterfaces MIB mobileip: IP Routing for Wireless/Mobile Hosts idn: lnternationalized Domain Name 3 12tpext: Layer TWO Tunneling Protocol Exten- magma: Multicast & Anycast Group Membership S10ns pana: Protocol for carrying Authentication for pppext: P0int-t0-P0int Protocol Extensions Network Access 1 atommib: AToM MIB zeroconf: Zero Configuration Networking dhc: Dynamic Host Configuration ipv6. IP. Version 6 Working Group 運用・里工リア (Operations and Management Area) 0 dnsop: Domain Name Server Operations 4 aaa. Authentication, Authorization and AC- entmib. Entity MIB counting eos: Evolution of SNMP 3 adslmib. ADSL MIB ipfix: IP Flow lnformation Export 2 bridge: Bridge MIB nas re q : Network 、 mboned. MBONE Deployment sming: Next Generation Structure 0f N'lanage- 1 disman. Distributed Management ment lnformation hubmib: Ethernet lnterfaces and Hub MIB policy: P01icy Framework ngtrans: Next Generation Transition rap. Resource Allocation Protocol ptommne: Prefix Taxonomy Ongoing Measure- agentx: SNMP Agent ExtensibiIity ment & lnter Network Experiment snmpv3. SNMP Version 3 rmonmib: Remote Network Monitoring muIti6: Site Multihoming in lPv6 0 bmwg: Benchmarking Meth0d010gy snmpconf: Configuration Management with SNMP DH-CHAP: Di 幵 ie-Hellman Enhanced CHAP for iSCSl SLP を用いた iSCSI ターケットおよび名前サービスの探 DH-CHAP : iSCSl 用の Di 幵 ie-HeIIman による CHAP iSCSI 用の認証として Diffie-Hellman 暗号を利用し た CHAP を提案している。 SLP を用いて iSCSI ターゲットおよび名前サービスを 探索する手法を提案している。 [draft-black-ips-iscsi-dhchap-OO. txt] 166 UNIX MAGAZINE 2002.6