実行 - みる会図書館


検索対象: UNIX MAGAZINE 1993年2月号
67件見つかりました。

1. UNIX MAGAZINE 1993年2月号

(dbx) run 1 3 Running : a. out 14 13 10 11 10 11 10 9 35 35 35 33 33 32 32 32 8 sum = i = 3 35 sum trace : sum = i = 2 十十 ) trace : sum i = 2 sum 1 十十 ) trace : sum = 1 trace: sum = 0 十十 ) trace: sum = 0 trace: sum = 32 1 0 trace : (dbx) program exited 1 3 first 1ast atoi (* + + argv) ; atoi(* + + argv) ; for for for (i (i first ; = first; first; 1 1 1 く く く 1ast ; 1ast ; last; printf ( "%d\n" sum) ; with 3 ドを実行してトレースの出力をする場合にも、 display サプコマンドの効果が表れます。とはいえ、 dbx から 出力が得られるときにいつでもこのサプコマンドが有 効になるわけではありません。 trace サプコマンドでは なく when サプコマンドを実行すれば、 display サプコ マンドからの出力はされません。 displ サプコマンド に関しては、 dbx のプロンプトが出る前に実行されると だけ憶えておくのがよいでしよう。 デバッガでの実行か遅くなる プログラムのトレースをおこなう場合は、引数なし の trace サプコマンドを乱用しないように注意しまし よう。引数なしで実行すると、すべての行が出力されて しまいます。このときデバッガは、いったんすべての 行にプレークポイントを設定して、デバッガに制御が 戻った段階で実行している行を出力し、実際にその位 サプコマンドでも同様の問題か起こることがあります。 これは trace サプコマンドに関するものですが、 stop り遅くなってしまいます。 に制御カ唳っています。この方法では、実行速度がかな 再開します。つまり、 1 行出力するたびに毎回デバッガ 置にプレークポイントが設定されていなければ実行を この出力をよく見ると、不思議な点が 2 つあります。 1 つは最初に display サプコマンドを実行している部 分で、 bad data address という見慣れない表示があ ります。これは、 display サプコマンドを発行した段階 でまだ関数 ma ⅲを実行していないため、変数の土や s Ⅷカ陏効なアドレスを指していないことを表します。 したがって、プログラムが実行されて、各変数が正しい アドレスを指すようになると、正しい出力がされていま す。同様なことは、 display サプコマンドの引数に使っ た変数が見えなくなる場合にも起こります。たとえば、 ある関数のなかで停止したときにその関数に局所的な 変数を使い、 display サプコマンドを発行してその関数 を抜けてしまったあとなどです。このときは、 ] " IS active J などといった表示がされ、 " ( クオート ) で括られた変数 か現在は有効ではない ( 使えない ) ことが示されます。 もう 1 つは、 dbx のプロンプトが出ていないのに変 数の値を出力している点です。しつは trace サプコマン 134 stop サプコマンドでは、 stop at 行番号 や、 stop if 条件 stop in 関数名 という形式のものを紹介しましたが、 stop 変数名 や、 このはかにも、 という形式のものも準備されています 1 。 stop 変数名 では、指定された変数の値が変更されたときにプログ ラムの実行は中断します。 stop if 条件も同様で、指 定された条件が真になったときにプログラムの実行は 中断します。 1 この stop if 条件という形式は、 1992 年 12 月号でもすこし説明 しました。 UNIX MAGAZINE 1993.2

2. UNIX MAGAZINE 1993年2月号

SPA 日 C 上で MS - ロ OS 用ソフトウェアの実行を可能とする MS - ロ OS 工ミュレータ SoftPC ( 日本語 DOS Ⅳ版 WINDOWSB. 1 SoftPC は , SPARC の SunOS 上で旧 M PC / AT の完全な環境をソフトウェア的に実現し , MS-DOS, W ー NDOWS3.0 / 3 . 1 および日本語 DOS / V で稼働する全てのソフトウェアを SPARC 上で実行が可能と なる・ MS ー 00S ソフトウェア・エミュレータ " である。 Super VGA グラフィック機肯皀をサポート。 ・ SoftPC はソフトウェアのみで p / AT の MS - DOS 環境を実 現するものであり , ユーザは別にポード等のハードウェ アの購入は一切必要がない。 ・ SoftPC を使用することにより , ユーザは SUN SPARC 上 で 5 万種類以上の MS - DOS 用のアプリケーション・ソ フトウェアを一切無修正で実行することが可能となる。 ・日本語 DOS/V の実行が可能 : SunView,OpenWin- dow2.0 / 3 . 0 または X Windows 下で , MS-DOS の他 , W 爪 DOWS3.0 / 3 コおよび日本語 DOS / V 等のマルチウ インドウ環境を実現。 ・グラフィック機自皀 : EGA,VGA, SVGA (1 024X768 ) 。 LPT2) 。 ・パラレル・ポート : 印刷用に 2 個 (LPTI および / ヾイス , 印刷 spoo 厄 r またはファイルを経由して出力。 ・シリアル・ポート : 2 イ固 (COMI および COM2)0 TTY デ 芝 J - 引 OOSGX で実行する場合よりも高速である。 合の方カく , 32 ビットの 386 / 387 ( 33 メガへノレッ ) の東 ・実行速度 . 同一のプログラムを s 。 ftPC で実行した場 ・ MS-DOS は , 前もってインストール済となっている。 の大規模なソフトウェアの実行・開発が行なえる。 ・凵 M EMS4.0 拡張メモリーのサポートにより 1 6Mb まで ・ 80286 および 80287 のプロテクト・モードをサポート。 3 nq ー 0 oftP 豊ー p Co れ行 0 ー P れ・一 口を 地Ⅳ Pie Sales SPARC 上で 486 実装の SBus カードにより 486DOS / V マシンの環境を実現 日本語 DOS / V ・ SparcPC486 ( WINDOWSB.I SparcPC486 は , SUN SPARC の SBus のスロットに lntel 80486-33MHz / 66MHz の CPU ポードの装嗔 を行い , ノ、一ドウェア的に MS - DOS 用のアプリケーションを高速で直接実行する SBus カードである。完 全な MS - DOS の機能およびネットワーク環境と 486 の高性肯皀な′ヾーフォーマンスを SPARC 上で実現する ノ、一ドウェア / ソフトウェアを糸充合イヒした SBus カードとなっている。 ・純正旧 t 80486DX -33MHz および 80486DX2- 66MHz の CPU を搭載した SBus カードにより , 通常のスタ ンドアロンの DOS / V マシンの工漿境を SPARCstation - とで / 、 ドウェア的に実現。 ・ MS-DOS, 日本語 DOS / V , W 爪 DOWS3.0 / 3 コ等のアプリケーシ ョンを 486-33MHz / 66MHz により高速で実行することが可 能となる。 ・解像度 24X768 の Supe 「 VGA (SVGA) 機能の他 , 旧 M 8514/ASuperVGA (SVGA) グラフィック機能をサポー ト。 SparcPC486 のポード上に , IMB のビデオ RAM を実装。 ・エクステンドおよび拡張 (Expand) DOS メモリー管理機能 により DOSExtender をサポート。大規模なソフトウェア の開発・実行が可能。 ・ SparcPC486 カード - とに , RS232- シリアノレ・ポートおよびセ ントロニクス・バラレル・ポートを標準装備。 ・ NFS および Novell の NetWare 等の PC 用ネットワークを サポート :Novell NetWare 等のネットワークおよび UN Ⅸ / DOS/PC ネットワーク・ファイルおよび資源を共有できる。 NFS マウント・ドライプにファイルの転送が行え , PC-NFS の別途購入が不要である。 ・ SparcPC486 の実行速度 . スプレッドシートのような CPU の演算を主として用いる実行の場合は , 通常の 486PC と全く同等の実行速度を有する。主としてレ 0 を多用する 演算の場合は , EWS のディスク・システム・ハードウェア および UN Ⅸの利点により , 通常の 486PC よりも SparcPC486 で実行する方が遙かに高速となっている。 SPARC 上で Macintosh 用のソフトを実行 Mac EmuIator Mac EmuIator により SPARC±で Macintosh 用のアプリケー ション・ソフトウェアの実行が可能となる。 Mac Emulator の 環境下で UNIX と Mac のアプリケーションの移動が双方向で 可能な他 , SPARC 上の X-Window で一切の修正を行わずに Macintosh 用のアプリケーション・ソフトウェアの実行が可 能となっている。 〒 113 東京都文京区本郷 3 丁目 5 番 5 号 マイクロソフトウェア株式会社 容 03 ( 3813 ) ー 8221 代 FAX03 ( 3818 ) 7888 資料請求 N 。 .87

3. UNIX MAGAZINE 1993年2月号

TURBOchannel T 1 アダブタ 図 8 アダブタのなカデータの流れ Rx FSM 日 FO 8 8 1 I/O Line LIU 1 8 1 Tx FSM 日 FO 8 8 1 フレームピットと HDLC による挿入ビットを削除し、シ 8 つの状態と 21 の出力があり、 TxFSM には 7 つの状 フトレジスタ (SR) でデータのピットを送り込む。シフト 態と 23 の出力がある。それぞれの FSM ごとに、 3 つ レジスタカヾ不になると、 RxFSM はデータをバイト単位 の PROM を使っている。 FSM のクロックは、 TI 回線 で FIFO に書き出す。シフトレジスタへの受イ大態の書 のビット幅のおよそ 8 倍、つまり、 TI 回線上のピットは 込みと、 FIFO への書出しは並行しておこなえる。プログ 648nS の幅があり、 FSM のクロックは 80ns 間隔であ ラムが、実行アドレスがアダブタの 4MB の空間内にある る。これによって、ビットがくるあいだに、シフトレジス ロード命令を実行すると、データは FIFO から出て、 I/O タやカウンタの操作、アンダーフローのテストなどができ インターフェイスを通じて TURBOchannel 上に載せら る。 1.5Mbps というのはとりたてて速いわけではないが、 速度制限のない TTL の腕力を借りて、十分な速度か得ら れる。 送信器でのデータの流れは、受信器のものと対称にな れるようにしている。 っている。プログラムがその実行アドレスがアダブタの プログラムによる I / O インターフェイスの寒見には、 7 4MB の空間内にあるストア命令を実行すると、 TUR- つの IC しか使っていない。 4KB の FIFO があったの BOchannel から流れてきたデータは I/O インターフェ で、 OS 側で割込みをそれはど高速に処理しなくてもよく イスを通じて FIFO に入る。 TxFSM は FIFO からデー なった。また、アダブタか頻繁に重川乍しても、割込みによ タを読んでシフトレジスタのなかにロードし、 TI フレー る 1 回のコンテクスト・スイッチのあいだに数バケット ムビットと HDLC のヒ、ツト挿入をおこない、 CRC ビッ の処理ができる。さらに、バケット間に 1 個の HDLC フ トを加える。それから、そのビット列を LIU へ送り出す。 ラグだけしか入っていないようなバケットの生成も、デバ LIU は正と負のパルスを生成し、 DSX-I インターフェイ イスドライバにあれこれと工夫を凝らさなくてもよいよう スをトランスを通して駆動する。 になっている。 1 バイト移動するのに必要な命令サイクル を最小にするように、細心の注意か払われている。 受信器 データの言もムみ中に受信器の FIFO 状態を返すことで、 図 9 は受信器の構成図である。矢印はデータのビット コピーしているループのなかでの余分な CSR の I/O の流れを示す。 LIU は、 3 つの信号を同期回路を通して 込みを避けることができる。同様に、余分な CSR の I/O RxFSM に供給する。 3 つの信号とは、 clock と data 、 読込みは、送イ訓にコピーをおこなうループのなかでも必 loss-of-signal である。 RxFSM はデータのピットを 8SR 要ない。 に送り、 8Cnt でデータを数える。 8Cnt がアンダーフロー データの流れ を起こしたときは、 8SR にあるバイトを FIFO に書き出 す。また、状態も同時に 8SR に入り、 FIFO に書き出さ 図 8 は、アダフ。タのなかのデータの流れを示している。 れる。ピットは 8SR から書き出さ CRC に入れられ TI 回線から始まり、パルスはトランスを通じて LIU へ る。そのとき末尾に HDLC フラグがあれば、 CRC はそ やってくる。 LIU は入ってきたパルスからクロックを取 れを最後のデータであるとみなす。 5Cnt を使って連続し り出し、データを RxFSM にイ合する。 RxFSM は、 TI ニニロ 92 UNIX MAGAZINE 1993.2

4. UNIX MAGAZINE 1993年2月号

print &average(l .. 10 ) ; Perl のサプルーチンは値を返すことができる。値を返す サプルーチンを、、関数〃など別の名称で呼ぶ言語もある が、 perl ではすべてのサプルーチンは値を返す。サプルー チンの返す値を指定する方法は 2 種類ある。 まず、普通に実行文が連続している場合、最後に評価し た式がそのサプルーチンの値となる。 ( 1 ) の例では、最後の 式である、 どこで宣言するか PerI は最初にプログラム全体を解釈してから実行する ので、サプルーチンの旦言はプログラム中のどこにあって もかまわない。 Pascal のように最初にサプルーチンの宣 言を書いて、最後にメインプログラムを書いてもよいし、 宣言は後回しにしてもよい。もちろん、それを組み合わせ てもかまわない。プログラムの読みやすさを第一に考えれ ばよいだろう。 しかし、気をつけなけれはならないこともある。たとえ ば、次のような文がプログラムの最後にあったとする。 $uniq = 1 ; sub uniq { $uniq + + ; 気持ちとしては $ u ⅲ q という変数を 1 で初期化して、 uniq というサプルーチンが呼ばれるたびに 1 から始まる 整数値を次々と返してはしいのだが、じつはこの初期化の 文は、プログラムの制御がここまできたときに初めて実行 を使いさえしなければ普通に実行できるので粳利である。 了する。作成途中のプログラムでも、実装していない機能 呼出し部分が実行されたときに、実行時工ラーになって終 ムのなかにあっても、そのまま実行できる。ただし、その また、定義していないサプルーチンの呼出しがプログラ $uniq + + ; $uniq = 1 unless defined($uniq) ; sub uniq { 気にするほどのことではない。 ないだろう。こうすると実行時のオーバーヘッドがあるが、 の初期化をおこないたけれは、次のような具合にするしか どうしても終りにあるサプルーチンの宣言の近くで変数 ある。 いるのだが、この種の間違いを犯すことがいまでもたまに されるので、思ったようには動いてくれない。分かっては なるようなことはますないだろう。 るとマニュアルには書かれているが、この速度差が間題に return 文を使わないほうがすこしだけ高速に実行でき 返している。 数のなかに負の数が出てきたら、そこで処理をやめて一 1 を グラムは、任意の個数の引数の平均値を求めるもので、引 的にサプルーチンの値を指定することができる。 ( 2 ) のプロ 次に、 return 文を使って、実行を終了すると同時に明示 の値が、サプルーチン自体の値となるわけである。 ( 1 ) ② 138 sub sub $a ローカル変数 10 Ⅱ ge て { # $a 、 $ b をローカルに local ($a, $b) length($a) > length($b) $a : $b; sub { print ” sub : a=$a\n" ; } 1 ; local ($a) &sub ; # $ a をローカルに 2 に変更 # サプルーチンのなかではどうなるか ? UNIX MAGAZINE 1993.2

5. UNIX MAGAZINE 1993年2月号

calling add(i = returning 35 from calling add(i returning 38 from add calling add(i = 4 returning 42 from add calling add(i = , 」 = 42 ) 5 returning 47 from add calling add(i = 6 returning 53 from add calling add(i = 7 returning 60 from calling add (i returning 68 from add calling add(i = returning 77 from 77 = 68 ) = 60 ) = 53 ) = 47 ) = 38 ) = 35 ) = 33 ) add add , J add from from f て om from from f て om f rom function function function function function function function function ma1n maln malli malli execution completed, exit code is 3 program exited vith 3 (dbx) 行番号を指定する trace サプコマンドと同様に関数 ばより便利になるでしよう。 を調べることがよくあるので、この機能をうまく使え のデバッグでは、いくつかの関数の引数と戻り値の組 るときには、関数の戻り値が出力されています。通常 から呼ばれたかが出力されています。また関数から戻 関数に制御が移る時点で、その引数と、それがどこ trace in 関数名 と、 trace 関数名 名を指定するものにも、 132 バッグはおこなえます。 どで予定していないところで値か書き換えられてもデ 値が変わったときに出力されるので、ポインタの使用な の位置と値を出力します。この機能を用いると、変数の です。これは指定された変数の値が変化したときに、そ trace 変数 あります。それが、 さらに、 trace サプコマンドにはもう 1 つ別の形式が ように気をつけてください。 つの関数に限定するものです。この 2 つを間違えない これは、引数を付けない trace サプコマンドの効果を 1 式は、指定された関数のなかだけがトレースされます。 という 2 つの形式があります。 trace in 関数名の形 検査したい変数が、ある関数のなかで使われている とすると、変数をトレースする関数を指定することもで trace 変数名 in 関数 場合は、 UNIX MAGAZINE 1993.2 ・ ( セミコロン ) で区切って並べることもできます。 という 3 種類か指定できます。 dbx のサプコマンドを 条件式指定された条件が成立したときに実行 in 関数名指定された関数を呼び出したときに実行 at 行番号指定された行に到達したときに実行 という形式で指定しますが、条件には、 vhen 条件 { コマンドの並び ; } す。このサプコマンドは、 せん。こういう場合に whe Ⅱサプコマンドを利用しま に when サプコマンドを仕掛けたりすることはできま レークポイントやトレースを設定したり、はかの位置 変数の値を出力するだけでなく、その時点で新たにプ プコマンドを使っても実現できます。しかし、単純に たんに変数や式の値を表示したいだけなら、 trace サ 合などに有効です。 で、変数の値を表示してプログラムの実行を続けたい場 れるコマンドを指定します。ある位置に到達したところ 定するのではなく、指定された位置に到達すると実行さ ます。 when サプコマンドは、プレークポイントを設 の実行は一時中断され、 dbx のプロンプトが表示され いるときにプレークポイントに遭遇するとプログラム イントを設定するものでした。プログラムを実行して stop サプコマンドは、指定された位置にプレークポ 条件にもとづくコマンドの実行 だけ出力がおこなわれます。 を指定できます。この場合は、その条件が成立したとき if 条件 trace サプコマンドの 6 つの形式には、すべて後ろ 数の値か書き換えられたときに画面に出力されます。 きます。この場合は、その関数のなかで使われている変

6. UNIX MAGAZINE 1993年2月号

DZ—X 流プログラミング 流れがたどれると説明しました。しかしこれらのサプコ マンドを使うには、 dbx のプロンプトに戻るたびにサプ コマンドをキー入力しなおさなければなりません。 dbx には、プログラムをトレースする専用のサプコマンドが 用意されています。これが trace サプコマンドです。 trace サプコマンドは引数を指定しないで使うと、各 行を画面に表示しながら実行します。これまで使ってい た伊題プログラムを使って、このサプコマンドの動作を 見てみましよう。 % cat a. c main ( argc , argv ) int char int int argc ; **argv, 1 ; first , 1ast ; atoi(* + + argv) ; first last = atoi (* + + argv) ; first ; i く 1ast ; i + + ) { for (i sum 十 = i ; printf ("%d\n" , sum) ; % dbx a. out Reading symbolic information . Read 44 symbols (dbx) trace ( 2 ) trace (dbx) run 1 3 Running : a. out 1 3 8 trace : 9 10 trace : 十十 ) 11 trace: 10 trace: 十十 ) 11 trace: 10 ここ数回、 BSD 系の UNIX に搭載されている dbx trace: 十十 ) というデバッガを用いて、プログラムをテンヾッグする方 13 trace: 35 法について紹介してきました。これまでの知識でも十分 14 } trace : テンヾッグ作業はできますが、便利に使えるサプコマンド program exited with 3 (dbx) はまだまだあります。なかでも、プログラムの実行をト こでは、出力が長くなるのでプログラムに渡す引 レースする機能や、ある条件が成立したときにコマンド 数を 1 と 3 にしました。上の例からも分かるように、 を実行する機能などは重宝します。今回は、これらの機 trace サプコマンドはかなりたくさんの出力をおこない 能についてお話しします。 ます。コンピュータがこんなにも多くの行を処理して いたのか、と感動してしまうくらいです。しかし人間 プログラムのトレース にとっては、必要なデータがどこにあるかをみつける のが大変で、かならすしも読みやすいとはいえないで 前回、 step やⅡ ext サプコマンドについてお話しし すね。 trace サプコマンドは、このようにすべての行を たときに、ステップ実行をおこなうとプログラム実行の 28 今泉貴史 first = atoi(* 十十 argv) ; last = atoi(* + + argv) ; for (i first ; i く 1ast ; for (i = first; i く 1ast ; for (i first ; i く 1ast; printf ( "%d\n" sum) ; 130 UNIX MAGAZINE 1993.2

7. UNIX MAGAZINE 1993年2月号

変数名や条件式を指定したときは、ある位置にきた ときにその条件を調べるのではなく、変数の値や条件 式の値が変わる可能性のある場所、つまりすべての場 所で値の検査をおこなわなければなりません。この場合 も、引数なしで trace サプコマンドを実行するのと同様 のことか起こります。つまり、いったんすべての行に内 部的なプレークポイントを設定して、変数の値や条件式 の値を検査したあとで、停止する牛ならは実行を中断 し、変数の値に変化がなかったり条件が成立しなければ 実行を再開します。 このように人知れす数多くのプレークポイントを設 定するサプコマンドは、プログラムの実行速度を低下 させる原因になるので十分注意してください。そのよ ・ when 式 ・ trace 変数名 trace ・ stop if 条件 ・ stop 変数名 うなものには、 ごまとしたコマンドを紹介するつもりでしたが、まだま サプコマンドなどについてお話ししました。今回はこま display サプコマンド、その指定を削除する undisplay 毎回指定しなくても自動的に式の値を表示してくれる を実行する whe Ⅱサプコマンド、 print サプコマンドで ンド、なんらかの条件か成立したときに一連のコマンド 今回は、実行の流れをトレースする trace サプコマ いてください。 ぶんデバッガに対する負荷も大きいことを覚悟してお の形式には注意が必要です。便利な機能ですが、その if 条件 などか挙げられます。このほかにも、 ているコマンドはないだろうな・・ したコマンドを紹介したいと思っています。 さて、次回こそは前回予告したとおり、 だ残っていたのでこれらの説明をしました。 もう忘れ こまごまと UNIX MAGAZINE 1993.2 ( いまいすみ・たかし東京工業大学 ) MEMORY 談 ADE ECIA 。 各種ワークステーション 拡張メモリ ( 国産製使用 ) 1 。低価 弊社だからこそできるスペシャル価格サーピス。 面倒な社内稟議や予算申請もクリア / 大学・官庁 夂は各種研究所でもすぐにお見積もりいたします 対応機種 . SPARC ( SUN & 互換機 / OEM 機ー東芝、富士通、他 ) NeXT SONY NEWS.. その他の機種、別途お見積もりいたします。 H P-Vectra DECNA Xstation SiIicon Graphics-Iris Epson Equity Ⅱ e I BM-PS2 series 0 0 Compaq-Systempro/Deskpro AT&T-6386Series AST Research- Premium& Bravo Zenith-Z-386Series/SupersPORT * Laser Printer Memory HP-LaserJet/IBM-4019/Apple Laser-Writer Ⅱ NTX-J Epson-EPL6000/Canon LBP 8 Ⅲ aser Beam Printer 2 。信実繝 おかげさまて、大学官庁はじめ各企業等、数多くのユーザー 様へ納めさせていただいております 又弊社のメモリは国産パソコンメーカーへの OEM 供給を・ しており、製品には絶対の自信があります。 ( 製品保証 : 1 年間 ) ご希望により出張取り付け作業をお請けいたします ( 但し 都内近効 ) 135 資料請求 N 。 . WE ◎販売代理店募集中 ( お気軽にこ連絡下さい。 ) ( 担当 : 高山 ) 〒 101 東京都千代田区神田須田町 1 ー 5 ー 14 ディアマントビル 6 階 X. 03-3258-3890 TEL. 03-3258-3891 東京サーキット株式会社 お問い合わせは

8. UNIX MAGAZINE 1993年2月号

IJN Ⅸへの招待① は、 ん os 腕佖 me :filename を実行すると、ローカルマシンのファイル五ん 7 がリモー rcp filel remote :file2 使用できます。したがって、 この形式は、コピー元、コピー先のいすれのファイルにも すると、ローカルマシンを指定したものと解釈されます。 という形式でおこないます。このうち、カ os / 襯震を省略 トマシン襯 0 の五ル 2 へコピーされ、 rcp remote :filel file2 では、リモートマシン襯 0 のファイル五 / がローカ ルマシンのファイル万ル 2 へコピーされます。また、 rcp remotel :filel remote2:file2 モートマシン snoopy の /tmp に同し名前でコピーしてみ のカレントディレクトリに存在するファイル rakko を、リ 実際の実彳列を見てみましよう。ローカルマシン (wife) トマシン襯 0 ル 2 のファイル万ル 2 へコピーされます。 では、リモートマシン襯 0 ル 7 のファイル万ルノがリモー ます。 wife—% ls ー 1 1 aya wife-% rcp rakko wife-% rsh snoopy 1 aya wife—% 7 Nov 2 14 : 20 rakko 17 : 50 /tmp/rakko 7 Nov 3 ls ー 1 /tmp/rakko snoopy : /tmp このように、 rcp ではコピー元やコピー先のファイル名 にローカル / リモートのホスト名を付加することで、ネット ワーク内のマシン間でファイルをコピーできます。 ところで、 rcp remote : write/syoutal などと、リモートマシンのファイルを ( 絶対パス名以外の ) 相対パス名やファイル名だけで指定すると、ユーザーのホ ームディレクトリからの相対パス名として解釈されます。 こでは、リモート側でのユーサー名はローカルマシンで rcp コマンドを実行したユーサーと同じログイン名です。 たとえば、ローカルマシンで aya というユーサーが、 rcp remote: write/syoutai というコマンドを実行すると、リモートマシン remote の ューサー aya のホームディレクトリ下に存在するファイ ル write/syoutal が、ローカルのカレントディレクトリに コピーされることになります。 異なるログイン名のユーザーのホームディレクトリを起 点に、相対パス名を用いてファイルをコピーする場合は、 コピー元 / コピー先の指定に次のような形式を使うことも できます。 144 社フ ~ 07 れ e@ん OSt れ佖〃 ~ e : 、 le れ 07 れ e 様に、 rcp でも 2 つのファイルを参照し、ファイルコピーの ログインやリモート実行の可否が決定されます。これと同 サーのホームディレクトリの . rhost が参照され、リモート rlogin や rsh コマンドでは、 /etc/hosts. equiv やユー rcp のセキュリティ機能 述します ) 。 しでログインできる権限が必要ですが、これについては後 ン snoopy に takashi というユーサー名でバスワードな としますにのとき、ローカルのユーザーは、リモートマシ takashi@snoopy : write/UNIXprog/02. tex ァイル write/UNIXprog/02. tex を指定する場合は、 snoopy のユーサー takashi のホームディレクトリ下のフ らの相対パス名として解釈されます。たとえば、ホスト 〃襯 e でのユーサー″ se 〃襯 e のホームディレクトリか ここで五襯 e に相対パス名を使うと、ホスト加 という指定では、 rcp を実行したユーザーが、ローカルと同 hostname :filename 可否が決定されます。具イ勺には、 UNIX MAGAZINE 1993.2

9. UNIX MAGAZINE 1993年2月号

連載 / 凵 Language¯O ・ do_intr SIGINT 、 SIGQUIT 、 SIGTERM などのシグナルを受け 取ったときにおこなうべき処理を書く。 ・ do_resume SIGTSTP (C シェルからは通常で発生できる ) で 停止したプログラムを fg などて再開するときに、おこ なうべき処理を書く。多くの場合、画面の書直し処理 です。 &main ' cleanup しなければなりません。その後始末をするルーチンが、 いますから、アプリケーションを終了する前にそれを解除 末を cbreak 、 -echo かっ、、非同期割込みモード " にして また、実行開女都にルーチン &game ' init-tty で、端 などをする。 プログラムを実行した様子を示します。 押されたときは、その文字を出力します。次にリスト 1 の キーポードから入力さオま終了します。 q 以タキーが 表示されます。この文字列が 5 回出力されるか、 フォルト値 ) に、 * * DingDong * * ' という文字列が に示します。このプログラムを実行すると、 2 秒ごと ( デ さて、 game フレームワークの簡単な利用例をリスト 1 % jperl dingdong ・ PI 図 1 Snake の実行醯 0 0 0 O 0 0 0 0 0 2 0 0 0 0 0 0 0 000000000 のデータ構造は配列て表現されていて、 け独立した実体として取り扱うようになっています。蛇 このプログラムでは、蛇 (snake) のデータをできるだ になります。図 1 は snake の実行画面の様子です。 くなるので、より気をつけて制御しなけれはならないこと ( 現在の方向 , 必要な長さ , xO , y0 , xl , yl , xn , yn) * * Ding Dong * * * * Ding Dong * * input = く a> * * Ding Dong * * input= く b> lnput= く C> * * Ding Dong * * * * Ding Dong * * % jperl dingdong ・ pl Bye . input= く q> * * Ding Dong * * * * Ding Dong * * ←キー a を押した ←キー b を押した ←キー c を押した ← 5 回表示したので終了 ←終了 ←キー q を押した サンプルのゲームについて サンプル・プログラムとして用意したのは、 Snake と 呼はれるゲームです ( 末尾のリスト 2 ~ 4 ) 。画面上で進 んでゆく蛇を、壁にも自分自身にも衝突しないように操作 し、画面上に転がっている餌 ( フルーツ ) をより多く食べ させるというものです。餌を食べるたびに蛇はだんだん長 68 といったかたちになります。 package snake を利用する だけなら、とりあえず snake の実現方法を知らなくても プログラムできるようになっています。一種のカプセル化 ですが、 perl 4.0 では構造をもつデータをうまく扱えな いので、まあ、、カプセル化もどき " だと思ってください。 do-resume のなかでは、画面全体の書直しをしていま す。で停止したのちまた再開した場合、画面を再生し てやらないとゲームの続きができないのでこうなってい ます。これを実現するためには、現在何が表示されてい るかの情幸肋ゞ必要ですが、この情報は field というパッ ケージで扱っています。この情報へのアクセスもすべて パッケージのインターフェイス・ルーチン経由でのみお こなっています。勺な原則として、あるデータへの 直接操作は、あるパッケージのなかの、あるルーチン内 部に限定されるようにしてあります。 こうしておくと何がよいのでしよう ? 大きな利点とし て保守性の向上か挙げられます。たとえばリスト 5 のよ うな変更をおこなうと、キー入力 H 、 J 、 K 、 L で一度に多 くのステップを進めることができます。またリスト 6 の ような変更をおこなうと、複数の蛇を動かせるようになり ます。いすれも、プログラムのオリジナルの構造を大きく 変えることなく実現されています。 UNIX MAGAZINE 1993.2

10. UNIX MAGAZINE 1993年2月号

UNIX ワ - クステ - ション用 自動シトタウン制御システム咽 IJN Ⅸワークステーションは、 IJN Ⅸの世界的標準化の流れにのり、今やあらゆる分野で急速に導入されています。 システムを停止させる場合、正規の「システム停止 ( シャットダウン ) 手続き」を実行しないと、 OS の性格上ディス ク上の重要なソフトウェア資産を全て失いかねないという危険な側面を持っています。 FEL -1020 は専用インテリジェント ups ( 無停電電源装置 ) と停電監視及び自動起動 / 停止制御プログラム ( Fe ⅱ Safe / 20 ) からなり、操作をパソコン並に使いやすくした画期的なシステムです。無人運転時に発生する 停電対策や、タイマー及びカレンダー機能を利用することで自動運転が容易になり、ワークステーションを自動 制御装置の一部として使用したり、定時にワークステーションを起動しておくことにより、いつでもすぐに作業に 取り掛かる事ができる等、色々な利用形態に柔軟に システム構成 対応できるようになりました。 停電監視及び自動起動 / 停止制御プログラム (FeliSafe/20) は IJN Ⅸワークステーションのティスク上にインストールし専用イン テリジェント IJPS とペアて使用します。 LJPS が発生するシャッ トダウン信号及び制御プログラムによる LJSP 切断信号をインター フェースする為、ワークステーションの日 S232C ポートを 1 個使用 し、専用ケープルて IJPS と接続します。 ◇サン・マイクロシステムズ SPARC station ※その他のワークステ LJNIX S シリーズ ◇富士通 ーションにつきまし ワ - クステ - ション◇東芝 AS シリーズ ては御相談下さい。 HP Apollo 9000 シリーズ 700 ◇ YHP 対応機種 NWS -3800 / 3700 / 3400 / 3200 シリーズ ◇ソニ ー 1020 システム構成図 FEL- タイマ UPS 切断信号ー今 ぐーシャットダウン信号 ワークステーション電源 手元スイッチ RS232C ACIOOV UPS 寺徴 ( 1 ) 停電発生時の自動シャットダウン / 予めセットした時間経過後、損傷を与えす安全に自動停止させます。 2 停電時のユーサ定義手続きの実行 / 停電発生時、予め登録した手続きを自動実行することで、利用者への警告等を行うことができます。 3 シャットダウン時のユーサ定義の実行 / 稼働中のアプリケーション固有の終了手順を登録することにより、停電時に完全にアプリケー ションを終了させた後、ワークステーション ( システム ) を停止させます。 4 手元スイッチによる自動起動 / 自動シャットダウン ( オプション ) / 手元スイッチを押すことにより、ワークステーション及び ups 並 びにシステムを起動 / 停止させることができます。停止時には、 3 のユーサ定義手続きの実行を行った後にシャットダウンを行います。 5 タイマーによる定時起動 / 自動シャットダウン ( オプション ) / タイマーによりワークステーション及び IJPS 並びにシステムを起動 / 停止させることができます。停止時には、 3 のユーザ定義手続きの実行を行った後にシャットダウンを行います。 6 カレンダー機能 ( タイマーと連動 ) ( オプション ) / カレンダープログラムで休日はシステムが動作しないようにすることかできます。ま た、休日に使用したい場合には事前の設定変更だけで、当日通常どうりの時間にシステムが起動します。 7 電源の自動切断 / シャットダウン手続きをワークステーションで行うとシャットダウン後、 UPS の電源も切断し、寿命を延ばします。 価格・構成 停電対策専用の制御プログラム〔 Fe ⅱ Safe / 10 〕も好評発売中 ー FeliSafe/10 ( FEL ー 1020 の機能・特徴の ( 1 ト ( 3 ) をサポート ) ・一・・ 158 , 000 FE い 020 ( 構成 / システム制御プログラム (FeIiSafe/2 の ー 600VA/UPS ・ 138 , 000 UPS ( IKVA 、 4 ロ、 10 分 / ヾックアップ ) ー 1 KVA/UPS Y 178 , 000 UPS 接続用 RS232C ケープレ ( 3 メートル ) ー FEL-610(600VA/lJPS 十 FeliSafe/10) ・・ ・・ V 270 , 000 \ 44 000 オフ。ション′ / 手・元スイッチ V8 、 000 、タイマー ー FEL -1010 ( 1 KVA/UPS 十 FeliSafe/10) ・ ・・ Y310 , 000 Y30 , 000 カレンダー機能 Y30 , 000 精冖ハイテックインターナショナル十記 32493 81 代 ~ 。 - 。 ~ - 。。。 ・開発 / 製造元株式会社アクシス 資料請求 N 。 068