0 ce elif [ $ 7 = ” 2 ” ] then if [ “ $ { } ” = ” yes ”—a —d /etc/rc. d ] fi stty sane clocal tab3 2>/dev/nu11 fi fi exit _exit 1 ] ; then 近 [ $-exit ー exit=$? /bin/sh ${f} start for f /etc/rc2. d/S* if [ /etc/rc2. d ] fi fi then fi exit exit 1 ] ; then if [ $-exit ー exit=$? 1 ⅳ曲 ${f} stop for f /etc/rc2. d/K* then if [ /etc/rc2. d ] echo 'Changing to state 2. ' then fi then elif then fi for f in 'ls /etc/rc. d' ⅱ [ ! -s /etc/init. d/${f} ] /bin/sh /etc/rc. d/${f} _exit=$? if [ $-exit ー 1 ] ; then exit _exit fi then fi echo ' ・ e systæ is ready. ' echo 'Qrange to state 2 has been completed. ' Very L a rge Data Bases CALL FOR ATTENDANCE VLDB ' 91 September 3 ー 6 1991 Barcelona Catalonia, Spain The 17th lnternational Conference on Very Large Data Bases, maintaining the reputation of highest quality and truly international participation, will be held from 3rd to 6th September 1991 ⅲ BarceIona, Catalonia, Spain. UNIX MAGAZINE 1991.8 more information: VLDB'91 Secretariat: DIFIN, S. A. Av. Repfiblica Argentina, 63 , Ent. 4a E ー 08023 Barcelona 41 E-mail: difinsa@lsi.upc ・ es FAX: 34 ー 3 ー 418 ー 440 ー 07 TEL: 34 ー 3 ー 418 ー 80---67
第 e $ & 0 ce 0 ee リスト 2 ファイル nfs # ! /bin/sh start) nfs-start $ { 1 + “ $@" } ・ case $ 1 in main() { eval $ { 1 + " $@" } & return 1 Ⅱ return 0 not() { USAGE="usage: /etc/imt. d/nfs {startl stop}" ; # lnitialize the nfs software. stop) esac echO "$USAGE"; exit 1 nfs-start ( ) { PAIY=/net:/bin:/etc:/usr/bin:/usr/etc:/usr/ucb:/usr/etc/yp nfs=/etc # Have they set the hostname yet. If not' don't start the network ・ "no—hostname-set" ] ; then if [ "'hostname exit 0 fi # Check fo て existance Of tcp first. if [ ! -x /etc/havetcp ] Ⅱ not /etc/havetcp then exit 0 # Fire up NFS daemons if they are present and executable. # 1 五 e portmapper is the sine qua Ⅱ 0 Ⅱ , since doesn't vork it out # him. NO 響 that inetd supports RPC, init. d/tcp must start portmap # Therefore 土Ⅱ1t. d/tcp must be invoked before this script ・ 〔 -x /etc/havenfs ] 誠 /etc/havenfs then # Truncate /etc/xtab & 11m exprtfs if [ -x $nfs/exportfs ] ; 新 > /etc/xtab if $nfs/exportfs -a; then echO 'tExport file systems' else echO " 、、 nWARNING: /etc/exprtfs f 凾 1 . echo "(Can't mount to this systa)\n" else echo "(Can't mount tO this system)\n" echo "\n\nWARNING: unexecutable file: /etc/exportfs fi fi echo "NFS daemons:\ci' # NFS fi fi else fi if [ —r /etc/lockd. conf ] ; then server daemons if [ -x $nfs/nfsd ] ; then $nfs/nfsd 4 : # NFS client biO daemons if [ -x $nfs/biod ] ; then $nfs/biod 4 ; # NFS LOCk manager daemon echo echo nfsd\c" ー biod\c't $nfs/rpc. lockd 'head ー 1 /etc/lockd. conf' $nfs/rpc. lockd echo ” lockd\c" # NFS status monitoring daemon $nfs/rpc. statd ; echO UNIX MAGAZINE 1991.8 statd\c" 39
OSF / Motif のすべて一 リスト 2 リスト 3 UNIX MAGAZINE 1991.8 include—dirs [ 0 ] include—dirs [ 1 ] = "/usr/include/uil/ " U にファイ丿レ : conunand desc command_desc corrunand_. desc. parse_tree—flag = 0 ; command-. desc. report—varn—msg—flag = 1 ; command_. desc. report_info_msg—flag = 1 ; command_desc. machine_code—flag = 0 ; command_desc. resource_file—flag = 1 ; . listing—file—flag = 1 ; / * create a listing * / / * create a UID file * / / * create machine COde * / / * report inf0 messages * / / * report a11 warnxngs * / / * Ⅱ 0 create a parse tree * / . status—update—delay = 300 ; / * set proper delay * / compile—stat = Ui1(&command-desc, &compile—desc, MessageCB, &user-mess—data, StatusCB, &user—stat data) ; # generating Makefiles for stuff outside the X sources ・ # script tO generate a Makefile from 田 1 lmakefile. Sometimes useful for # ximake: # ! /bin/sh buttonl = ; caddr_t client—data, call—data; Widget w; GetWidgetIdCB(), client—data, call—data) VOid Widget buttonl ; C ファイル : MmNcreateCa11back = procedure GetWidgetldCB() ; callbacks { object aaa: XmPushButton V1dget { procedure GetWidgetIdCB() ; what=$2 xtop=$l progname=$O xsrctop [whattomake] " fi if fi fi fi fi fi = x ] ; then if [ x"$xtop' usage: $progname echO exit 1 [ x"$what" = x ] ; then what="Makefi1e" if [ ! -d $xtop ] ; then ech0 "$progname"' exit 1 if [ ! -d $xtop/config ] ; then Ⅱ 0 such directory $xtop' echo t$progname" exit 1 if [ ! -f lmakefile ] ; ech0 '$progname"' exit 1 if [ -f $what ] ; then no X configuration files ・ under $xtop" then can't find pwd'/lmakefile" m -f ${what}. bak mv $what ${vhat}. bak ech0 "Making $what from lmakefile" PAIY=$xtop/config:/$xtop/uti1/imake:$PAITI \ 加 e —DTOPDIR=$xtop -l$xtop/config -l$top/util/imake ・ includes $what 109
if [ - て /etc/autanount. conf ] ; then $nfs/autcmount 'head ー 1 /etc/automount. C0社, echo "Starting automounter. fi # Workaround to k1Ck 1アC. mountd [ -x fs / ci 0 ] ; $nfs/rpcinfo -u 'hostname' 皿盟 > /dev/null; 第 e $ & 0 ce 0 ・ # ! /bin/sh リスト 3 K60nfs exit 0 main $ { 1 + ““ } fi ki11 $pidlist then if test "$pidlist" ! = ” done pidlist="$pidlist ps —e ー fO て proc in nfsd biOd pidlist=" " ー 0 nt -v —k -t nfs nfs-stop() { fi mount —a —v —t nfs fi # ! /bin/sh リスト 4 rc2 の例 fi exit 1 echO "Warning: $REALFII. E does not exist" exec "$REAI. FII. E" $ { 1 + " " } else then if [ -f "$REAI. FILE" ] REALFII. E="/etc/init. d/nfs" # /etc/init. d. # make your modifications. DO not change the file in # opration, copy the /etc/init. d file on top 0f this file and # If you vant tO make a special 10Ca1 version Of this # This script executes a correspondlng script in /etc/init. d. "Run Commands" executed when the system is changing t0 init state 2 , traditionally called "multi¯user". # N01 ・ Any shells executed by the for—loops should return: 2 十 : catastrophic error, don't continue 1 bad/irregular usage 0 : Ⅱ 01 a1 execution . /etc/TIMEZONE Pickup start-up packages f0 て mounts, daanons' set ( ho —rc then echO systan is comxng up. P1ease wait. ' BWT=yes etc . if [ —f /etc/rc. d/PRBERVE ] # historical segrent for vi and then mv /etc/rc. /etc/init. d /etc/init. d/PRESmE /etc/rc2. d/S02PB.æmE fi 40 UNIX MAGAZINE 1991.8
IJN Ⅸ流プロクラミング 10 できます。世の中にはもっといろいろなことを調べられる test コマンドもありますが、どんなマシンでも動くように ここに挙げたものだけにとどめたほうが無難で するには、 す。 次に C シェルの場合ですが、こちらのほうは test コマン ドの助けを借りなくても同様な検査ができます。 test コマ ンドの引数に指定していたものを、そのまま条件部に書い てしまえはいいのです。この場合も一 r だけでなく、 -w( 存 在、書込み可能 ) 、 -x ( 存在、実行可能 ) 、 -e ( 存在 ) 、一 0 ( 存在、自分のもの ) 、 -z ( 存在、大きさが 0 ) 、 -f ( 存在、 / # ! /bin/sh 、ゝ普通のファイル ) 、 -d ( 存在、ディレクトリ ) などの条件が 使用できます。 象となるファイル名を並べることで簡単に実現できます。 でしよう。 for や foreach の words を指定する部分に、対 B シェルならは for 、 C シェルならば foreach を使うこと 複数のファイルを処理する場合、もっとも簡単な方法は 複数のファイルの処理 こでは、 B シェルを用いた例を示します。 for f in /usr/local/lib/test—file $HOME/. test—file . /test—file if [ -r $f ] ; then ファイルに関する処理 ( $ f を使う ) done ファイルを並べるとき、各ファイルの優先順位に気をつ、ゝ読み込みたければ、次のようにして実現することができま こでは設定を上書きするものとして、優す。 けてください。 先順位の低いものから並べてあります。どれか 1 つだけを / # ! /bin/sh file_name= for f in /usr/local/lib/test-file $ HO 寵 /. test—file . /test—file done if い if [ -r $f ] then file—name=$f ー ] ; then '$file—name't ! = ファイルに関する処理 ( $ 鼠 e ー name を使う ) 複雑な計算をしなけれはファイルの名前が得られない 場合、いったん変数に格納しておき、それを for 文の words の部分に指定することもできます。 今回お話ししたオプション設定用のファイルを、実際に B シェルや C シェルで使っているプログラムはほとんど ありません。例題にしてもかなり無理なことをしているの で、あまり実用的とはいえないでしよう。こうしたファイ ルを使う場合のアルゴリズムを理解していただきたくてこ んな無理をしてしまいましたが、さまざまなプログラムを 見ることですこしでも理解を深めていただければさいわい 142 です。 UNIX MAGAZINE 1991.8 ( いまいすみ・たかし東京工業大学 ) を利用して処理するお話をしようと思っています。 けで、次回は同しオプション設定用のファイルを、 C 言語 とを C 言語で実現するのは、はるかに簡単です。というわ C 言語での実現のための前準備と考えてください。同しこ B シェルや C シェルのお話ばかり続きましたが、これは
注意 ァイルを削除しなくてはいけません。これは、次に挙げ を変更しますが、そのほかの旧いドメインに関連するフ もちろん、このときにん sr/nserve/rfmaster ファイル します。 期化しなくてはなりません。これには、、 dorfs init" と RFS ドメイン名などを変更する場合は、 RFS を再び初 echO —n starting rfs : 迂 [ —f /usr/nserve/rfmaster ] ; then /usr/ns erv e /netspec /usr/ns erve /domain るファイルです。 ゝ /var/net/nls/netsPec ( ここでは tcp) /addr /var/net/nls/netsPec( ここでは tcp) /dbf これらのファイルを削除したあと、 RFS を初期化・再起 動します。 プート時の起動 システムのプート時に RFS を起動するには、 / etc / rc ファイルに以下の行を追加します ( 通常は、コメントアウト されています ) 。 if [ ! —f /usr/nserve/loc. passwd ] ; then > /usr/nserve/loc. passwd echo echo " " > /usr/nserve/loc. passwd. dummy /usr/bin/dorfs start ; echo ' done. if [ —f /usr/nserve/loc ・ passwd. dummy ] ; then rm —f /usr/nserve/loc. passwd /usr/nserve/loc ・ passwd. dumy 、ゝ key02 の / FI にマウントするものとします。 アドバタイズ 次に、実際にファイルを共有 ( マウント ) してみましょ う。 RFS ファイルサーバーを monkey01 、 RFS クライア ントを monkey02 、 monkeyOI の /FormuIa1 を mon- ます、リソース名を決めます。ここでは、、 FIDATA 〃と いう名前にします。次のように adv コマンドを使い、この リソース名を RFS ドメイン内にアドバタイズします。 [ -d " コメント " ] リソース名バス名 [ クライアント名 ... ] adv 、、一ドオプションは read-only でリソースを提供する場 合に指定します。コメントは 32 文字以内、リソース名は 14 文字以内です。パス名には、 NFS でマウントしたパスも指 定できます。 最後のクライアント名は、このリソースにアクセスを許 すマシンを限定する場合に指定します。 ときには省略します。 こでは次のようにします。 とくに限定しない root@nonkeyOI# adv —d "F—I GP data 洫 ' 91 " FIDATA / FO 創 ulal こで引数なしの adv コマンドを実行すると、ローカル root onkeyOI # adv / Fo ロ 1u1a1 "F—I GP data in ) 91 " FIDATA また、 RFS ドメイン内でアドバタイズされているリソー rootGnonkey02# nsquery RESOURCE ACCESS 70 SERVER のマシンが提供するリソース情報を知ることができます。 read/write unrestricted UNIX MAGAZINE 1991.8 DESCRIPTION スは nsquery コマンドで調べることができます。
LJN Ⅸ流プログラミング 10 endsw end echo optlon a: $a echO option b : $b echO option c : $c foreach の行で逆クオート ( つを使っていますが、これは 逆クオートで囲まれたコマンドを実行した結果がそこに書 かれているかのように動作するものです。この場合は、ホ ームディレクトリの . test-file というファイルのなかに書 かれた単語すべてが foreach のために指定されたものと して動作します。 これで目的は達せられますが、オプション設定用のファ イルに書かれる内容が多くなると foreach に対する単語 の指定が長くなり、このコマンドは動かなくなってしまい ます。注意してください。 変数の設定の読込み さきはどの例では、オプション設定用のファイルをどん なふうに記述しても対処できるように case 文を用いたの で、かなり複雑になってしまいました。しかし、変数を設 定するだけならもっと簡単になります。変数を設定してい るファイルをそのままプログラムで読み込んで実行してし まえばいいのです。 そのための機能として、 B シェルでは . コマンド、 C シェ breaksw 、、、ルでは source コマンドが利用できます。 . コマンドや source コマンドは、引数として指定された ファイルを読み込み、その内容があたかもそこに書かれて いるかのように評価します。 B シェルや C シェルを新たに 起動しても、それはサプシェルのなかで評価されるだけな ので、現在実行している B シェルの変数の設定にはなんの 影響も及ばしません。 この機能を利用してコマンドをカスタマイズする場合に は、プログラム中で、 B シェ丿レ→ . ファイル名 C シェ丿レ→ so Ⅱ rce ファイル名 のようにします。ただしファイルに文法工ラーなどが含ま れていると、 B シェルの場合は実行の段階で異常終了して しまいます。また、 C シェルの場合はエラー位置の直前ま でしかコマンドが実行されす、中途半端です。そこで、 のファイルが正しく記述されているかどうかを検査しな ければなりません。 検査だけをおこなう方法はありませんが、試しに実行し てみてエラーがあるかどうかを判定することはできます。 新たに B シェルや C シェルを起動して実行してみて、その 終了ステータスを使って判断すればいいのです。 この方法を利用すると、 B シェルと C シェルではそれぞ れ次のようなプログラムになります。 ◆ B シェ丿レ if /bin/sh $HOME/. test—file >/dev/null 2 > & 1 ; then $HOME/. test_file else echO or found in $ HO /. test—file 1 > & 2 exit 1 ◆ C シェル /bin/csh —f $HOME/. test—file > & /dev/null if ($status) then echO 0 て found 土Ⅱ $ HO /. test—file exit 1 source $HOME/ test—file endif else このようにすれば、ファイル中のエラーを示すことがで きます。 B シェルの場合、 if 文の条件部に実行コマンドを 140 指定し、そのコマンドの終了ステータスが 0 ( 正常 ) のとき にはすぐ次の部分が実行され、 0 以外 ( 工ラー ) だと else UNIX MAGAZINE 1991.8
ん。異なるネットワークではこのバケットが物理的に届か ないからです。また、 1 台の計算機が同時に複数のドメイ ンに属すことはできません。 それでは、設定の説明に入ります。マスターサーバー スレープサーバー、 NIS クライアントの順番で話を進めて N 旧の齪 ・ NIS ドメイン おく必要があります。 いきます。 設定を始める前に、次のような項目をあらかしめ決めて マスターサーバーの設定 ドメインの名前、どの計算機を同しドメインにするか。 ・サーバーになる計算機 /etc/hosts や /etc/passwd など、サーピスの対象とな /ethers の整備 1 ) / etc / hosts 、 / etc / passwd 、 / etc / bootparams 、 / etc 以上の 2 点を決めたあと、次のような手順で設定します。 できません ( ただし、スレープサーバーは起動できます ) 。 マスターサーバーが動いていないと、クライアントは起動 りもあとにシャットダウンするものでなけれはなりません。 つまり、どの計算機よりもさきにプートし、どの計算機よ れらの計算機はできるだけ運用時間の長いものにします。 マスターサーバーとスレープサーバーになる計算機。 、、、るファイルはマスターサーバーの情報が使われます。この ため、クライアントの情報を含むよう、注意して設定しな おします。とくに、ディスクレス・クライアントをもつ計 算機がある場合、 /etc/bootparams 、 /etc/ethers はきち んと整備しなくてはなりません。さもないと、 NIS 環境に 移行したとたんにディスクレスが立ち上がらないとか、ロ グインできないなどの事態に陥ってしまいます。 2 ) /etc/defaultdomain の定義 /etc/defaultdomain というファイルに、設定したいド メイン名を定義します 8 。 root@naster# vi /etc/defaultdomain root@naster# cat /etc/defaultdomain S . 3 ) ドメイン名の設定 ドメイン名の設定には、 domainname コマンドを使い ます。ドメイン名を "saru" にした場合、設定と確認は次 のようにします。 domainname saru domainname saru rootålaster# 4 ) /etc/rc. local の編集 NIS 関係は、 /etc/rc. 10Ca1 からプート時に設定されま す。そこで、次のような編集をしなくてはなりません。 ・ ypserv 、 ypbind 、 ypxfr9 が立ち上がるようコメントアウ トをはずす ・ /usr/etc/rpc ・ yppasswdd が立ち上がるよう次の行を 追加する if [ —f /usr/etc/rpc ・ yppasswdd -a -d /var/yp/'domamname ' ] ; then /usr/etc/rpc ・ yppasswdd /etc/passwd -m passwd; echO —n yppasswdd' 5)ypinit コマンドによるデータベースの作成 /usr/etc/yp ディレクトリで ypinit 次のようないくっかの質問に答えます。 a) 重要でないエラーが起こったときに処理を中断する ー m を実行します。 58 b ) マスターサーバーおよびスレープサーハーの計算機名 リターン (n) を入力します。 か ? 一連の質問のなかで、もっとも大切なものです。あらか しめ決めておいた計算機の hostname を入力します。し っかりと確認しましよう。 8 SunOS 4.1 では、 /etc/defaultdomain は /etc/rc. 10C引の先頭部分でドメイン 名を設定するために使われます。また、このようなファイルを使わすに直接 /etc/rc.local で設定されている場合もあります。 9 ypxfr は、スレープサーバーがマスターサーバーから NIS マップを定期的にコ ピーするときに使います。 UNIX MAGÄZINE 1991.8
連載 An lntroduction tO X Window System 図 4 生徒側に表示させるための sh 記述の例 # ! /bin/sh then exit else DISPLAY=$I ; export DISPLAY xwatchwin unix Professor & shift ; exec $ 0 $ * ←引数がなくなれは終了 ←引数の最初を、とりあえすの表示先に設定 を一 un ⅸ : 0.0 の Profe or ウインドウを表示 ( あらかじめ、、一 name Profesor オプションを つけて実行されたウインドウ ) ←次の引数以降を同じコマンドで実行 発せられる EXPOSE イベントに対して、再描画のための 正しい手順がとられなくてはいけません。ですから、プロ トコル・レベルでの仕掛けはそうそう簡単には実現できな いのです。 現在の X の仕掛けでこのような要求を満たそうとすれば、 教師側が提示のためのウインドウを用意しておき、一定時 間ごとにその表示内容のコピーを生徒側のそれぞれのウ インドウに表示するのがもっとも簡単です。ある時点の教 自呱の画面を生徒の、、 seito:0.0 〃のサーバーに表示させる だけでしたら、 xwd と xwud コマンドを組み合わせて、 % xwd ー xwud —display seito : 0.0 & とすれは実現できます。ただし、この方法では画面が変わ るたびに繰り返さなけれはなりません。また、 1 つ前に起 、、、動したウインドウを終了させないと、生徒側のディスプレ イはウインドウで溢れてしまいます。 user-contributed には、これを解決するコマンドも含まれています。 xwatchwin という名則のこのコマンドは、一定時間ご とに特定のウインドウの表示内容を別のディスプレイ上に 表示させることができます。提示ウインドウの指定には、 2 通りの方法があります。提示するウインドウの起動時に ー name オプションなどによって名前がつけられていれば (-name オプションがないものもあります ) 、 xwatchwin の引数の最後にこの名前を指定するだけで表示できます。 名前がつけられていない場合には、ウインドウ ID を利用 します。そのようなときには、 -w オプションを使って孑ぐ します。このほか、画面の更新時間を秒単位で指定する -u オプションがあります。 xwatchwin の使い方は、 xwatchwin 提示サーバーのホスト名 c-u 更新秒数 ] c-w ウインドウ ] [ ウインドウ名 ] となっています。 このコマンドでは、表示先は環境変数 DISPLAY の値だ けが参照されます。つまり、生徒側で実行されることを想 定しているわけです。これは、たぶん分散されることを目 的に設計されたからであろうと思われます。ただ、ウイン ドウ ID を指定するには不便です。また、教師側はすべての マシンに対して xhost などを用いて利用許可を設定して おかねばなりません。 逆に教師側で xwatchwin を実行し、個々の生徒側に表 示させるための sh 記述を図 4 に示しておきますので参考 にしてください。なおこの場合、各生徒側では教師のマシ ンに対する利用許可の設定が必要です。 xwatchwin の利用にあたって注意すべきことは、提示 側と表示側のディスプレイの深さが異なる場合には利用 できないという点です。たとえば、深さ 8 のカラー表示と 156 深さ 1 のモノクロ表示のディスプレイとのあいだでは利 用できません。 いすれの方法にしても、個々の表示ごとに別のプロトコ ルが流れますので、ネットワークの利用率が高まります。 とくに、流れるデータがイメージそのままである場合、す くなくとも教師からイメージを獲得する側もしくは生徒へ 提示する側のどちらかは、、 unix : 0.0 〃などの外部のネット ワーク利用率を抑えるように心掛けるべきでしよう。 同し内容を別に表示するメカニズムとして、共有メモリ 拡張機能を利用する方法も存在します。 xwatchwin では 更新時間についての配慮が必要ですが、この方法を利用す ればその手間が軽減できます。それでも、異なったサーバ ー間での通信を根本的に低減できるものではありません。 ( なかむら・まことシャープ ) UNIX MAGAZINE 1991.8
み 7 はー乙グみ ー U-TERM 以降が実行されます。 C シェルのほうは、 if 文の条件部に 式を指定し、その値が 0 ならば偽、 0 以外ならば真と判断 されます。このため、 B シェルと C シェルでは else の前後 に書くものが入れ替わっていますが、それ以外はよく似て いますね。 しかしこの方法は、どんな場合にもファイルに己述され ているコマンドを実行することになり、 ( rm なとの ) 恥医 しのつかないコマンドを実行してしまう可能性があるので、 あまりお勧めできません。自分で書いたのだから仕方がな い、といってしまえばそれまでなのですけれどね。 NEC ー PC98 田シリーズ用 EPSON-PC286 シリーズ用 (MS-DOS ノヾージョン 3 コ以降 ) 1 三ロ守 曰ト機能のし旺 M 誕目 パソコンか UNIX WS の有能な端末に ファイルの存在確認 ファイルの読込みは、事前にファイルの存在を確認して からにしないと、コマンドが正常に重川乍しなくなることが あります。確認方法は、 B シェルと c シェルではすこし異 なります。 ます B シェルでは、 test コマンドの助けを借ります otest コマンドにはこれまでにも何度かお世話になっていますが、 いすれも数字や文字列の比較に用いてきました。しつはそ れ以外に、ファイル属性の検査にも使えるのです。 ファイルの存在と読出し可能かどうかを調べるには、 test —r ファイル名 もしくは、 [ -r ファイル名 ] のようにします。指定されたファイルが読出し可能な状態 で見つかれは、このコマンドは正常終了 ( 終了ステータス 0 ) します。ファイルに関する処理では、次のようにして if 文のなかに閉し込めておくとよいでしよう。 if [ —r ファイル名 ] ; then ファイルに関する処理 ■日本語機能 文字コードは、 JIS か MS 漢字コードの 2 種類から選 択。 JIS のモードでは、全ての文字コード拡張手順を サポート。 JIS 初期値と JIS 現在値を任意に変更でき るため、 EUC コードや DEC コードにも完全に対応。 ・グラフィック機能 テクトロニクス 4014 端末に準拠したグラフィックモ ード。カラーでの出力も可。 JIS と重複する画面消去コードを除き、 PC9801 と上 位互換を持つように拡張されている。ビジプルベル、 カーソルの形状変更、プリンクの有無などの制御コ ードを含む。これらは、ローカルに変更可。 RS-232C 拡張インタフェースポード 3 チャンネルの うち 1 チャンネルを選択使用。 75baud から、 19200baud ( クロック 10MHz 以上 ) まで 使用可、しかも、その高速処理は群を抜く。 フロー制御は XON / XOFF による制御法と信号法か らの選択。 ■ファイル転送機能 UNIX ホストと DOS ファイルの間でのテキストファ イル送受信が自在。コマンドは、 UNIX の cu と同様 の操作。 そ似也多彩な機能満載、しかも低価格実現 価格 48 , 000 円 ( 消費税は別途 ) 開発及び販売 第情報数理研究所 lnformation and Mathematical Science Laboratory,lnc. 〒ロー東京都豊島区池袋 2 ー 437 池袋青柳ビル TEL. 03 ー 3590 ー 52 Ⅱ ( 代表 ) FAX. 03 ー 3590 ー 5353 資料請求 N 。 . OOD ■画面制御機能 機 信 通 f i このように、予定外の状況に対しても適切な対応ができ るようにしておくことがたいせつです。ちなみに、 test コ マンドで調べられるファイルの属性は読出し可能かどうか だけではありません。 -w ( 存在、書込み可能 ) 、 -f ( 存在、 ディレクトリでない ) 、一 d ( 存在、ディレクトリ ) 、 -s( 存 在、 0 より大きい ) といった引数があり、一 r の代わりに指定 UNIX MAGAZINE 1991.8 141