easy - みる会図書館


検索対象: UNIX MAGAZINE 1991年10月号
10件見つかりました。

1. UNIX MAGAZINE 1991年10月号

連載 / Li 社 Language—⑩ &register-c1ient(CS, ' 123.123.123.123 ) &register—c1ient(CS, ' 123.123.123.123 ' , 9969 ) ; ・ &send-request ( CS, $ 7 ℃甲肥 s な $sync) 'myservice ) ; ーに接続されたソケット CS に対して $request のデータを送り出します。 $ れ c の値が perl の値として真なら、サーバーから返される答を待ち、そ れが &send-request() の戻り値となります。 $sync が 偽の場合は、一方的にメッセージが送られるだけて答は 待ちません。すなわち、サーバーからの答は捨てられま す。 $ s c が偽のときには、ある程度送るデータが溜ま るまで実際の送信はおこなわれす、ある時点でまとめて 送り出されます。 、、ある時点 " とは以下の 3 つの場合です。 1 ) &send-request() が $sync== 真 ' で呼はれた : 以前 に溜まっていたデータがます書き出され、さらに最後 の要求の応答を待ちます。 2 ) &sync-request ( ) ( 後述 ) カ平はれた : 溜まっている 要求を強制的に送り出します。 3 ) ある限界以上にデータが溜まった : 限界値は easy- serv. pl のなかの $easy-serv 'max-qlen という変数 で決まります。答を待たなければ、それだけ処理が速 くなるわけです。 ・ &sync-request ( CS) &send-request() の項でも触れたように、 cs に対し て送られすに溜まっている要求を強制的に送り出しま す。サーバーからの答は捨てられます。 ・ &cleanup—serv 現在オープンしているサーバー内のソケットをす べてクローズして、プログラムを終了します。通常は &serv-body() から呼はれます。 リスト 1 easy-ipc. easy-serv の関数使用例 リスト 5 ~ 6 に、 easy-serv の使用例を掲載します。 リスト 5 はサーバー側、リスト 6 はクライアント側の プログラムです。この例では、サー ーはクライアント からのリクエストに応して wh 。、 w 、 ps コマンドの結果 を返します。 ロ、の例を試す場合は、 myservice という TCP のサービスを /etc/services に登録してからおこなって ください ( サーバー・ホスト、クライアント・ホストと も ) 。また、登録の際にはシステム管理者と相談のうえ、 安全なポートを使うようにしてください。 まとめ いかがでしたか ? 簡単なライプラリですが、けっこ う役に立つはずです。ェラー処理やきわめて負荷の高い 場合の処理などに改善のお也はありますが、これはそれ ほど難しくないでしよう。また、 UDP や UNIX ドメ インのソケットの支援なども組み込みたいところです。 こうしてみると、 perl の強力さにいまさらながら感心さ せられます。 お気づきの方も多いと思いますが、今回紹介したラ イプラリは、思想的には RPC (Remote Procedure Call) に近いものです。 途中で 2 回はかり注意恥頁を挙げましたが、現在の UNIX はネットワーク・セキュリティに甘い部分がか なりあります。また、ソケットの取扱いを間違えるとダ ウンしてしまうシステムもありますので、このライプラ リを使った実験はある程度知識のある人やシステム管理 者と相談しながらおこなうことをお勧めします。 1 : 3 : 9 : 116 # EASY—IPC . PL UNIX MAGAZINE 1991.10 require "sys/socket . ph" modified by : srekcah@sra. CO ・ jp P1ease distribute widely, but leave my name here . original : written by Hiroshi Sak0h (sakoh@sra. CO ・ (p) on 11 ー 01 ー 90 Software Research Associates, lnc . 1990 , 1991 C opyr i ght

2. UNIX MAGAZINE 1991年10月号

連載 / Li Language—O 72 : # &send—request ($socket , $request , $syncp={true=SYNC' false=ASYNC}) 73 : 74 : # Sends a request tO a server, waits a reply from the server # and returns it . 75 : 76 : 77 : $easy—serv'max-qlen = 5 ; # max queue length 0f requests 78 : main ' send_request { 79 : sub local($sock) 80 : local($request) 81 : local($syncp) 82 : local($reply, $packet , $bytestoread, $actualread) ; 83 : local($bytestowrite) ; 84 : 85 : # do nothing if length($request) く = 0 86 : if length($request) く = 0 ; 87 : return 88 : # send request 89 : if ($syncp 90 : # flush queued request 91 : &send—packet($sock, $easy—serv' send—buffer{$sock}) 92 : if $easy—serv ' send-buffer—qlen{$sock} > 0 ; 93 : $easy—serv ) send—buffer{$sock} 94 : $easy-serv' send-buffer-qlen{$sock} = 0 ; 95 : # then send request in sync mode 96 : $reply = &send—packet($sock, 97 : sprintf ( " % 08d % 01d " , length($request) , $syncp) 98 : $reply = &receive—packet ($sock, 8 , 600 ) ; 99 : $reply = &receive—packet ($sock, $reply, 600 ) ; 100 : else { 101 : if ($easy—serv' send—buffer—qlen{$sock} 、く $easy—serv'max—qlen) { 102 : # buffering 103 : $easy—serv' send—buffer{$sock} 104 : (sprintf ( " % 08d % 01d " ,length($request) '$syncp) . $request) ; 105 : $easy—serv' send—buffer—qlen{$sock} + + ; 106 : } else { 107 : # flush queued request 108 : &send—packet($sock, $easy—serv' send—buffer{$sock}) 109 : if $easy—serv' send—buffer—qlen{$sock} > 0 ; 110 : # buffering 111 : $easy—serv' send—buffer{$sock} 112 : (sprintf ( " % 08d % 01d " ,length($request) ,$syncp) . $request) ; 113 : $easy—serv' send—buffer—qlen{$sock} = 0 ; 114 : 115 : 116 : 117 : 118 : 119 : main'sync—request { 120 : sub local($sock) 121 : # flush queued request 122 : &send—packet($sock, $easy—serv' send—buffer) 123 : if $easy—serv ' send—buffer—qlen > 0 ; 124 : $easy—serv'send—buffer{$sock} 125 : $easy-serv'send-buffer—qlen{$sock} 126 : 127 : } 128 : 129 : # # private within this file 130 : 131 : 132 : 133 : 134 : # send—packet 135 : sub send-packet { 136 : 137 : 138 : 139 : 140 : 141 : 142 : 143 : 144 : 145 : $request) ; $reply ; っ乙 cd Q) Q) k 0 bO > 1 」 0 1 2 1 」 1 っ 4 $ - 1 cd d cd cd td d 0 0 0 0 0 0 = 100 ) 100 ) ; 121 UNIX MAGAZINE 1991.10

3. UNIX MAGAZINE 1991年10月号

連載 / Li Language—O えます。 $timeout に 0 を与えると、プロックしなくな ります。反対に、 undef を与えるとタイムアウトせすに 待ち続けます。 easy-ipc の使い方の例 以上が easy-ipc の使い方です。これだけではどう使 えはいいのかよく分からない方も多いと思いますので、 リスト 2 ~ 3 に使用例を示します。リスト 2 はサーバー 側、リスト 3 はクライアント側のプログラムです。 ロこの例を試す場合は、 9969 のポートをすでに使 っているサービスがないかどうかを確認してください。 高レベノレライプ、ラリ (easy-serv) 次に紹介するのが、サーバー・クライアントプログラ ムを構築するための高レベルライプラリ easy-serv で す ( リスト 4 参照 ) 。このライプラリは、さきはど紹介 した easy-ipc ライプラリを下働きとして使います。 て、跏。で示されるポートにサーピスを設定します。 easy-ipc の &defserver() と同様、跏。にはポートを 表す数値そのもの、または /etc/services に定義されて いるサービス名が指定できます。たとえば、 &register—serv ()S , または、 &register-serv ()S , のように指定します。 9969 ) ; easy-ipc だけでも、サー ・クライアント型のア プリケーションは比較的簡単に構築できますが、大量 のデータを一度に受け取ろうとするときなどは、何回 かリトライの必要が出てきますし、また、サーバーか ら応答をもらおうとする場合にも同様の処理が必要で す。 easy-serv はこのあたりの面倒な処理をすべて引き 受け、ユーサーがやり取りされるデータの中身にだけ集 中できるようにするものです。 easy-serv の関数 通常、ユーサーが使うのは以下の 6 つの関数です。 &register-serv( GS, $ 〃 0 ) &run-serv ( ) &register-client( CS, $host, $ 0 ) &send-request ( CS, $ 7 ℃肥 s な $sync) &sync-request ( CS) &cleanup-serv ( ) ・ &register-serv( GS, 跏のの サーバー側で、 GS をジェネリック・ソケットとし &register—client (CS, &register—c1ient(CS, 'myservice' ) ; ' herhost ' 'herhost ' , 9969 ) ; UNIX MAGAZINE 1991.10 接続要求とクライアントからの要求処理を一手に引 き受けるループに入ります。この関数は、呼ばれると 返ってきません。 こで起こる疑問は、実際の処理をどう書くのかと いうことです。じつは &run-serv() は、接続の確立後 に送られてくるクライアントからの要求それぞれにつ いて &serv-body() という関数を呼び出します。この &serv-body() は、ライプラリを使用する人が用意しな けれはなりません。 &serv-body() の呼出し形式は、次 のようになります。 tserv—body($request, $socket) ; こで $request にはクライアントから送られてき たデータ、 $socket には、要求が送られてきたクライ アントに対応するソケットが渡されます。すなわち、 &serv-body() のなかでは、どのクライアントからど のようなデータが送られてきたかを知ることができま す。また &serv-body() の戻り値は、そのままクライ アントに返されます ( 返されない場合もあります。後述 の &send-request ( ) の項を参照 ) 。 ・ &register-client ( CS, $host, 跏 07 、り easy-ipc の &defclient() と同様に、 $host で示され るホストの上の跏。で示されるポートに接続を要求し ます。接続されたソケットは、ファイルハンドル CS にセットされます。 $ ん。はホスト名かインターネッ ト・アドレス、跏。はサーピスポートの番号そのもの か、 /etc/services に定義されている名前です。 次の指定はすべて有効です。 115

4. UNIX MAGAZINE 1991年10月号

連載 LittIe Languageo srekcah@sra. CO. JP 自由気ままに PerI フログラミング 5 ) はじめに UNIX MAGAZINE 1991.10 &selectsock-non-block( @sockets) &selectsock( @sockets) &acceptsock(NS, GS) &defclient (), $ ん 0 , 跏 07 の &defserver ( S, $ 〃 07 の ー構築を支援する高レベルのライプラリを示します。 ライプラリを紹介し、次いでマルチ・クライアントサー 今回は、ますネットワーク・アクセスのための基本 ム程度のお手軽さとまではいきません。 メントを真面目に読まなけれはならず、シェルフログラ 実際に使おうとすると、 "IPCprimer" などのドキュ ク上のサーバーを構築することも可能です。とはいえ、 や select ( 2 ) などにアクセスできるので、ネットワー アクセスするための基本機能があります。 socket(2) 皆さんもご存しのとおり、 perl にはネットワークに ん。でも、きっと皆さんのお役に立つものと思います。 ミングですから、それはどおおげさなものではありませ といっても Little Language の使命はお手軽プログラ 今回の題材は、ネットワーク・プログラミングです。 ります。 が、クラス資産がそれほど増えていないのでこれも見送 承と DB 機能が加わって使いやすくなっているのです たオプジェクト指向パッケージ OPERL も、多重継 したが、これはまたの機会にしましよう。前に紹介し uil を使ったユーティリテイもおもしろいかと思いま さて、今月は perl にすることにしました。 Motif の ( 、、いつものこと " という陰の声 ) 。 のなかで原稿を書いているせいか、頭も鈍りがちです 毎回無駄話で始まる Little Language ですが、猛暑 低レベルライフラリ (easy-ipc) 最初は、インターネット・ソケットへのアクセスを 支援する低レベルのライプラリ easy-ipc です。 で紹介するものは UN Ⅸドメインのソケットに対する アクセスはサホートしていませんし、 TCP 専用です。 たた機能拡張はきわめて簡単ですから、興味のある方は これを機会にネットワークの勉強を兼ねて拡張してみて ください。ごく大ざっぱにいえば、、、ネットワーク上に 双方向のパイプを構築するためのイ士掛け " とでもなるで しようか。 easy-ipc ・ pl というファイルを末尾のリスト 1 に 掲載しました。内部で定義されている関数の使い方を、 1 っすっ説明していきます。ここでは、ある程度ネット ワーク・プログラミングの知識があることを前提として います。この部分に興味のない方や、何はともあれプロ グラムを作って遊びたいという方は、「高レベルライプ ラリ (easy-serv) 」の節に進んでください。 easy-ipc を利用するためには、プログラムの最初に、 です。 ューサーから利用できるのは、以下の 7 つの関数 easy-ipc の関数 という宣言が必要です。 require "easy—ipc ・ pl " 113

5. UNIX MAGAZINE 1991年10月号

1 : 2 : 4 : 6 : 7 : 8 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 連載 / Li Language 44 : } 17 : } リスト 2 サーパー・プログラムの例 (easy-ipc) 9 : while ( 1 ) { GS; $sockets{GS} &defserver(GS, 9969 ) ; # 9969 にサーピスを設疋、 GS がジェネリック・ソケットになる require "easy-ipc ・ pl # ! /usr/local/bin/perl # 要求がくるまで待っ for (@avails) { # 要求があったすべてのソケットを処理する @avails = &selectsock(keys(%sockets)) ; # クライアントの普通の要求 } else { $ 取 e ; $sockets{$new} &acceptsock ($new , (S) ; print "got a connection request\n" # 接続要求 else # 接続終了 print connection iS closed\ll't delete $sockets{$—} ; # 読出し可能なデータか有在する $line print "got : $line\n" 1 : 2 : ′ 3 : 7 : 8 : 9 : 11 : 12 : 13 : 14 : 15 : 16 : 18 : 19 : 20 : 21 : 10 : while ( く > ) { print STDERR " ー > " ・ print STDERR print " sent : print CS $ ー # サーノヾーにデータを送る c10se(CS) ; # ソケットをクローズ UNIX MAGAZINE 1991 ユ 0 リスト 3 クライアント側のプログラム例 (easy-ipc) &defclient (CS, 'localhost ' , 9969 ) ; 5 : # CS にサーバーとの接続に使われるソケットか薇疋される 4 : # ローカルホストのサーピス 9969 に接続要求を出す require "easy—xpc ・ p # ! /usr/local/bin/perl 119

6. UNIX MAGAZINE 1991年10月号

1 : 3 : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : 29 : 30 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 67 : 68 : 70 : 71 : 120 連載 / Li Language— リスト 4 easy-serv. 可 21 : } 31 : } 69 : } # EASY—SERV . PL # &register—serv ($name , $port) require "easy—ipc. pl" ・ require "sys/fcntl . ph" modified by : srekcah@sra ・ co. 」 p PIease distribute widely, but leave my name here. original : written by Hiroshi Sak0h (sakoh@sra. CO ・」 p ) 0 Ⅱ 11 ー 01 ー 90 Software Research Associates, lnc . 1990 , 1991 C opyr i ght # Registers a service port . malll'register_serv { &main 'defserver ( $ ー [ 0 ] fcntl ( $ ー [ 0 ] , &F—SETFL , $-eserv-generic{$- [ 0 ] } &FNDELAY) Ⅱ die "fcntl: $ ー [ 0 ] $ ! \ Ⅱ " $ ー [ 0 ] ; # define generic socket # &register-client($name, $host , $port) # Registers a client port . sub main'register—client { $-eclient-sockets{$- [ 0 ] } = $ ー [ 0 ] ; fcntl ( $ ー [ 0 ] , &F_SETFL , &FNDELAY) for ( ; local($reply, $syncp) ; main ) run_serv { # Sends back a reply tO the requester. # Wait for a request, dispatch it . # &run—serv() Ⅱ die "fcntl: @avails = &main'selectsock(keys(—eserv—sockets)) ; # wait for a request #print "G0t Some Request\n" nextavail : for (@avails) { if (defined($—eserv—generic{$—})) { # ot a request for connection &main'acceptsock($_eserv_newsock, $_eserv_sockets{$_eserv_newsock} $_eserv_newsock; #print "New connectin on $ ー \ Ⅱ " } else { # get request 1ength(8) + syncp(l) $request = &receive—packet($ next nextavail if $request eq undef ; # i . e . Norma1? EOF $syncp substr($request , 8 , 1 ) ; substr($request , 0 , 8 ) , syncp=$syncp\n" #print "reqlen= # get request $request = &receive-packet($ substr($request , 0 , 8 ) ) ; next nextavail if $request eq undef ; # i . e. Unexpected EOF $reply = &main' serv-body ($request , $ ー ) ; if ($syncp 1 ) { # send back reply length($reply) reply=$reply\n" #print "relylen= &send-packet($ sprintf("%08d" , length($reply)) $reply) ; UNIX MAGAZINE 1991 ユ 0

7. UNIX MAGAZINE 1991年10月号

連載 / / 凵社 Language— 8 : # myservice を登金求 10 : &register—serv(SERVER, 'myservice' ) ; 11 : 12 : 13 : # サーバーループ ( この呼出しは返ってこない ) 14 : 15 : &run—serv() ; 16 : 17 : 18 : # 利用者は、次のルーチンを定義して与えなければなりません 19 : 20 : # $ ー [ 0 ] にはクライアントから送られてきたデータが、 21 : # $ ー [ 1 ] にはクライアントに対応するソケットが入っています 22 : 23 : sub serv—body { local($reply) ; 24 : 25 : # クライアントのソケット名を表示 26 : 27 : 28 : prlnt "client sock name= 29 : 30 : $reply who ( 31 : } elsif ( $ ー [ 0 ] eq "w") { 32 : $reply 33 : } elsif ( $ ー [ 0 ] eq "ps") { 34 : $reply 35 : } elsif ( $ ー [ 0 ] eq ” kill " ) { 36 : &cleanup-serv() ; 37 : else { 38 : $reply 0 is on this host\n" " who 39 : w(ho) is 0 Ⅱ this host\n" 40 : ShOW process\n" 41 : PS kill server\n" "kill 42 : s 0 this message\n' "help 43 : 44 : 45 : 46 : 47 : 48 : 49 : } # 関数の戻り値はクライアントに返される $reply; # This value is sent back tO the current client リスト 6 クライアント側のプログラム例 (easy-serv) 1 : # ! /usr/local/bin/perl 3 : # ライプラリをロード "easy—serv. 5 : 6 : 8 : # 'localhost' の 'myservice' ホートに孑妾 10 : &register—c1ient(CLIENT, 'localhost ' 11 : 12 : 13 : pr int 14 : while( く STDIN>) { 15 : chop ; 16 : # サーバーに要求を送る。 $sync = 1 なので答が返される 17 : 18 : $reply = &send-request (CLIENT, $ ー 19 : 20 : # 答を表示 21 : 22 : print $reply ; 23 : print " ー > " ・ 24 : 25 : } 123 UNIX MAGAZINE 1991.10

8. UNIX MAGAZINE 1991年10月号

連載 / Li Language—O 0 ・ 1 ・ , tn cd cd 「 1 ・ 1 Q) 0 CQ 一十 V 0 tn Ⅱ Q) ・ 1 ・ 1 Q) 中よ・ 1 Q) ・ 1 Ⅱ・ 1 0 0 0 > V 0 0 0 tn •P 0 ・ 1 ・ ( ・ tn O 肛 = & IV = V tn . ). O cd Ⅱ V) て 0 = - $ - Q) V tn 0 V ; ・ 1 O P Q) tn Q) k Q) ・ 1 ・ 1 O cn tn td td tn 1 1 r.n - $ ・ cd ・ 1 4-3 V Ⅱ tQ Q) C-5 C5 1 - $ - td O ・ 1 0 1 V V 0 1 工 - $ - k k て # # CH 146 : 147 : 148 : 149 : 150 : 151 : 152 : 153 : 154 : 155 : 156 : 157 : 158 : 159 : 160 : 161 : 162 : } 163 : 164 : 165 : # receive—packet 166 : sub receive—packet { 167 : 168 : 169 : 170 : 171 : 172 : 173 : 174 : 175 : 176 : 177 : 178 : 179 : 180 : 181 : 182 : 183 : 184 : 185 : 186 : 187 : 188 : 189 : 190 : 191 : 192 : 193 : 194 : 195 196 : 197 : # &cleanup—serv() 198 : 199 : # C10ses down a11 server sockets and exits . 200 : 201 : sub main'cleanup_serv { 202 : for(keys (-eserv—sockets) ) { 203 : close($-); 204 : 205 : 206 : exit ; 207. 208 : 209 : 1 ; socket length tO receive # $ ー [ 2 ] : maxtry (default = = local($sock) local($bytestoread) local($try) ; 10Ca1 ($MAXTRY) 10ca1($TIMEOUT) = 0 . 1 ; local($reply) ; #print "DBG : bytestoread=$bytestoread\n" $bytestoread > 0 ; $bytestoread $actualread) { for ( $reply for ($actualread = $tr = 0 & & ($try く $MAXTRY) ; $try + + ) { ($actualread &main' selectsock—with-timeout(l , $sock) ; $actualread = sysread($sock, $packet , $bytestoread) ; if ($actualread print STDERR " (Unexpected?) EOF on read , "got=$reply, more $bytestoread bytes are required. \n" close($sock) ; delete $—eserv—sockets{$sock} if defined $—eserv—sockets{$sock}; return undef ; $packet ; $reply #print "DBG: reply=$reply\n" $reply; 100 ) : 100 ) ; リスト 5 サーパー側のプロクラム例 (easy-serv) 1 : # ! /usr/local/bin/perl 3 : # ライプラリをロード 5 : require "easy¯serv. pl" 6 : 122 UNIX MAGAZINE 1991.10

9. UNIX MAGAZINE 1991年10月号

UN Ⅸへの招待⑩ あや く CTRL-D 〉 cc : ロ これは、 mail のオプション askcc か /usr/lib/ Mai1. rc か ~ / . mailrc のいすれかで設定されている場 合です (askcc は、いすれかで設定しないかぎり無効に なっています ) 。 cc : は、 Carbon copy の略です。タイプライターで 手紙を打っとき、カーポン紙をタイプ用紙のあいだに挟 んで何枚かのコピーを同時に作ることがあります。メー ルの cc: もこれと同じです。 Carbon copy を送って おきたいユーサーのログイン名を cc : の後ろで入力する と、そのユーサーにもメールが送られます。 % mail taro Subject : Guest 明日、 hogehoge 社の pekepeke 様が 私たちの部を見学にいらっしゃいます。 こ堵 6 合がよろしければ、ひと言こ験拶を お願いいたします。 あや Cc : orange , grape , pine この例では、 orange さん、 grape さん、 pine さんに Carbon copy を送っています。このように複数のユー ザーを Cc: で指定する場合は、それぞれをカンマ ( , ) で 区切ります。また、必要なだけ入力して Return キーを 押すと、 mail コマンドが終了します。 この Carbon copy 機能は、おもな宛先は runrun さ んだが、 hogehoge さんと pekepeke さんにもこのメー ルに目を通しておいてはしい、という場合に使うとよい でしよう。 詳しくは彳しますが、送られたメールには、 To : Cc : mail コマンドの引数で指定したユーサー cc : で指定したユーサー という情報が含まれています。すると受け取った側で は、自分に対してメールが送られたのか、それとも Car- bon copy が送られたのか、などが判断できます。 メールの到着を知る こでは、自分にメールが届いているか、誰からの メールか、などを調べる手段を勉強しましよう。 ログイン時のメッセージ ログインした時点でメールか届いていたら、 snoopy login : aya Password : XXXXXXXX というメッセージが表示されます。 Last login: Wed Aug 7 16 : 16 : 29 from snoopy. hoi ・ co ・ JP SunOS Re1ease 4.1.1 (DCLSIC) # 7 : Wed May 15 02 : 49 : 14 JST 1991 You have new . これを見れば、メールが到着していると分かりま す。、、 You have new mail. " ではなく、、、 You have mail こというメッセージが表示されることもあります。 これは、、、メールポックスにメッセージか溜まっていま すが、前回ログアウトしてから現在までのあいだに届い たメッセージはありません " という意味です。つまり、 160 前回ログアウトする前に届いたメッセージだけが、 ルポックスのなかに溜まっているわけです。 誰から届いているか メー メッセージが誰から届いているかは、 from という コマンドで調べられます。 UNIX MAGAZINE 1991.10

10. UNIX MAGAZINE 1991年10月号

e & 第 0 ce 加え、 RQF 、 BB 、 TSE の論理レコード単 ャストおよび工ラー処理については、 TIB 3 ) 二重化についてはサーバーの二重化、 位のフィールドが扱える (Teknekron lnformation Bus) 配信機 LAN の二重化方式で対応 2 ) 国際標準か確立されていないプロードキ 構で対応 4)TIB の上に C 言語による API を提供 されたデータの一部を UNIX サーバー上 にもち、マウス操作でデータが検索できる。 検索したデータは自動的にアプリケーショ AYHP ンに移せる。同社の HPALLBASE をサ 横河・ヒューレット・パッカード (Tel 03 700 / 400 、サーバー側に HP9000 シリーズ ポート (ORACLE 、 informix などにも順 ー 3331 ー 6111 ) は、 UNIX ネットワーク対応 800 を使用。ソフトウェアは、クライアント 次対応 ) 。 の意思決定支援システム「情報検索ミドル 側に表計算、 DTP などの標準アプリケー 2 ) 「ハイバー文書 DB 検索」 ウェア」の販売を開始した。 ション、サーバー側には RDB などのシス キーワード検索により、各種文書を WS クライアント WS の標準アプリケーシ テム・ソフトウェアを使用し、これらのソ のウインドウ上に表示できる。必要なファ ョン・ツールや検索用ツールから、サーバ フトウェアをバンドリングする。 イルは、自動的にアプリケーションに読み ー上に蓄えられた各種のデータが利用でき 情報検索用のツールとしては、次の 2 点 込まれる。 る。同社の提案する意思決定支援システム か提供される。 価格は、使用するサーバーマシンとユー の中核となるもので、ハードウェアはクラ 1 ) 「 RDB アクセス」 ザー数により 320 ~ 1 , 940 万円。出荷は 10 イアント側に HP Apollo 9000 シリーズ ホストの業務系 / 勘定系システムに蓄積 月末から。販売目標は、今後 1 年で 50 本。 対応機種は SPARCstation シリーズ ( 互換機を含む ) 。動作環境は SunOS 4.0. 3 ( JLE ) 相当以上で、ウインドウ・システム BALMEX は OpenWindows または SunViewo アルメックス (Tel 03 ー 3841 ー 4238 ) は、 4 ) 同一ネットワーク上で複数のサーバーの 価格は、サーバーが 270 , 000 円、クライ 分散型データベース・ソフトウェア「 Easy 共存が可能 アントが 190 , 000 円。保守料金は購入総額 -CaII Ver. 2.1 」の販売を開始した。 5 ) ファイル構造の変更をおこなう、、 Mod - ( 定価べース ) の 10 % 。 データベースの作成、検索などをおこな ify 機能クをサポート うユーティリティのはか、データベースに アクセスするための C 言語の関数ライプ ラリを含み、データベース・アプリケーシ ョンの開発が可育 ENSG おもな特徴は以下のとおり。 1 ) 10 , 000 件のデータが 1 分以内で読み書 日本シリコングラフィックス (Tel 03 ー される「 IRIS-4D 」に標準で添付される。 き可能、 500 , 000 件のデータの検索が即答 3473 ー 8431 ) は、ビジュアライゼーション・ 従来の IRIS ー 4D ューサーには、実費 ( 数万 可能など、高速なファイルアクセスを実現 アプリケーション開発システム「 IRIS 円 ) で提供する予定。また、同社では IRIS 2 ) データファイルの作成、インデックス・ Explorer 」を発表した。 Explorer の仕様を他社にも公開する。 ファイルの作成、ファイルの圧縮などを、 IRIS ExpIorer は、科学・工学分野のデ OS のコマンドラインからおこなう各種ュ ータをモデル化、可視化するもの。アイコ ーティリティを装備 ンをマウスで操作するだけでよく、プログ 3 ) データベースにアクセスする C 言語の関 ラミングは不要。アプリケーション開発に 数ライプラリを装備。可変長データ、レコ おいて、表示部分のプロトタイピングやユ ード単位の排他制御、デッドロックの自動 ーザー・インターフェイスの開発に利用で 検出、重加勺なインデックス制御などの機能 きる。 UNIX 、 X 、 OSF/Motif 、 IRIS GL を、ユーザーが作成するデータベース・ア などに対応。 プリケーションから利用可能 IRIS ExpIorer は、 1991 年末から出荷 思思決定支援システム クライアン F/ サーバー型テータベース プログラム不要の視覚化ツ→レ 5 UNIX MAGAZINE 1991.10