指定 - みる会図書館


検索対象: UNIX MAGAZINE 1996年7月号
95件見つかりました。

1. UNIX MAGAZINE 1996年7月号

インターネットの 利用と仕組み 吉村伸 リアルタイム型アプリケーション ( 3 ) はじめに 今回は、、、放送型 " のアプリケーションをとりあげま す。インターネットでは、 MIME 形式の電子メールや WWW で音声 / データを扱えます。これらは蓄積さ れたデジタルデータ・ファイルを転送し、その後再生する というガ去を用いています。 この方式では、サイズの大きな音声データを全部受け取 ったあとでなけれは再生が始まりません。そのため、逶 のあいた彳寺たされるという問題があります。そこへ登場し たのが RealAudio でした。 ReaIAudio は、データを転 言でいってし 送しながら再生する去を導入しました。 まうのは簡単ですが、インターネット上の音声データをこ のように扱うにはさまざまな問題があります。 ファイル転送型の場合、 http や FTP などを利用する ことになりますが、これらは TCP のアプリケーション です。 TCP は、フロー制御と再送手順などか安定した伝 送を提供します。とはいえ、通イ各を独占でもしないかぎ りリアルタイム性は期待できません。 1 つでもバケットが 欠けると、再送を要求します。回辛勦昆み合っているとき に、 FTP や http の処理が途中で止まったようにみえ、 しばらくして再開することはありますが、それでもデータ は欠落せすにちゃんと届きます。 音声などをリアルタイム性重視で送るときは、途中のパ ケットが 1 ~ 2 つ欠落しても、、、あいうえお " が、、あ〇う えお " になる程度です。致イ勺ではないと割り切ってしま えばいい場合もあります。このようなときは UDP を使 い、送信則はた充すだけで、再生する側て判断して処理 します。つまり、一 - ・定時間待って送られてこなかったら、 UNIX MAGAZINE 1996.7 図 1 データのバッファリンク 〃川・ , or た 今回は放送型 " 、すなわち片方向で、かっ多数の人が ド幅で高品位の音声を伝えられるようにしています。 の ) 支術を用いてできるだけ少ないネットワークのバン RealAudio や前回紹介した lnternet Phone は、独自 のがあり、各製品ごとにこの点てい合っています。 出もおおむね可能です。音声の ) 宿方式にはさまざまなも であれは、再生に関してはほは問題ありませんし、日第送 音声のみの場合には、・職丘の Pentium クラスの CPU 専用のハードウェアを必喫とする領域です。 ます。リアルタイムでの動像の MPEG 圧縮 / 伸長は、 だし、一率の高い方式は、そのぶん高速な処理を要求し このときに役立つのが、音声や画像の圧黼支術です。た 間内に可能な範囲でデータを送出します。 体としてどの程度のバンド幅を見込むかを決定し、一定時 れるようにすこレヾッファリングします。そのうえで、全 に跡切れ跡切れとなります。したがって、連続して再生さ 異なるため、ネットワーク上を流れるデータは図 1 のよう データが失われない場合でも、各バケットごとに遅延が その部分は捨てて次のバケットの処理に移るのです。 55

2. UNIX MAGAZINE 1996年7月号

第ド長ぐ - 、 4 を、第を →心 . ・ニをこシ RAID DISK SUB SYSTEM 釦ト , 員破叩一切 " ・朝 " NETVAULT は、米国 AT&T 社と英国 W に LOW 社との間 で共同開発したバックアップソフトウェアです。クライアン ト / サーバーシステムに対応する様々な皀を取り入れてお り、スケシュールバックアップおよび無人バックアップも可 能となっております。なお、バックアップに使用するテープ 装置については 4mm , 8mm , DLT 等があり、各種チェン ジャータイプにも接続可能です。また、価格について は他社のバックアップソフトウェアよりも競争力を持 った価格でご提供しております。 DATA BACK UP SOFTWARE ハードをより充実させる 強力バックアップノフトウェア Ver 5.0 を物 [ ・・第第 0 ′ 0 4 を城産 0 、 ・一 NetVauIt 特長 ・ G の採用 バックアップおよび復元が GUI により簡単に操作ができます。 ■多様なプラットフォームに対応 SUN, 旧 M,HP,DEC,NCR,Windows/NT 等の様々な OS に対応 しています。 ・自動集中管理 バックアップをサーバー上で集中的に管理するため、システム 管理者およびクライアントユーサの生産性が向上します。 ■バスワードによるセキュリティー管理 パスワードを設定することにより、システム管理者 ( およ びシステム管理者の認可を得たクライアントユーサ ) 以外 に、 NETVAULT の全機能をアクセスされないようにするこ とができます。 ・魅力的な価格 低コストで導入が可能 ・容易なスケジューリング G 上のカレンダーを指定することにより、簡単に設定が可 能です。 ・強力的なバックアップ用オプション 「 aw / ヾーティション、コンプレッション、データベースに対応 ■マルチボリューム 複数本のテープにまたがったバックアップが可能です。 ■様々なライブラリ装置をサポート 4mm , Q ℃ , 8mm , DLT のテープ装置および各種チェンシャー 装置に接続できます。 ■バックアップデータの信頼性 バックアップするときに自動的にデータの整合性をチェッ クしますので、確実にバックアップが実行されます。 300GB LYNX TOWER RAID series デスクサイド RAID システム LYNX TOWER RAID series はニ重化された R D コント ローラやパワーサプライにより対故障性を高め、ホット スワップも可能な RAID サプシステムです。ティスクに 障害が発生した場合はシステムを停止させることなく ディスクの交換とデータの復旧が容易に行なえます。 [ 対応機種 ] C 各種ワークステーション ( 〕各種 PC ※会社名、製品名等の固有名詞は、一般に該当する会社もしくは組織の登録商標または商標です。 資料請求 No. 047

3. UNIX MAGAZINE 1996年7月号

PERL ADVISOR ⑥ Perl のソート機能 データ管理におけるもっとも重要なイ」 : 事の 1 つは、デー タを意味のある順番に並べ替えることである。 PerI には、 強力かっ柔軟なソート演算子がある。今回は、 PerI スクリ プトとして実行できる各種のソートについて説明する。 ます簡単な例から考えてみよう。 Perl のプログラムの なかで、リストに入っている単語をアルファベット順 ( 技 術用語でいえば ASC Ⅱの昇順 ) にソートしたいとする。 これは簡単だ。 ("Fred" , "Barney" , "Betty" , "Wi1ma") ; @somelist @sortedlist sort @somelist ; こオ L で、、 @sortedlist は (Barney, Betty, Fred, Wi1ma) になる。これらの名前がファイルに書かれている のなら、ファイルから直接読み込んだり、ファイル名を PerI スクリプトへの引数として与えたり、ファイルの内 容を標準入力として読み込むことができる。 # ! /usr/bin/perl @somelist く > ; # すべてを読み込む @sortedlist sort @somelist ; print @sortedlist ; この場・合、 @somelist ( と @sortedlist) のなかのそ れぞれの名前は、末尾に改行・を含んでいる。しかし、末尾 の改行はソートの ) 側亨に景を与えないし、おかげで名前 の表示も簡単になるので問題はない。 もちろん、次のように短くすることもできる。 # ! /usr/bin/perl @somelist く > ; print sort @somelist ; さらに短くすることも・・ # ! /usr/bin/perl print sort く > ; 142 RandaI し . Schwartz 0 襯 U ル / x E レルル こんなことができるからこそ、 Perl はまるて暗号だと いわれるのだろう。ご覧のように、このプログラムではま ったく変数を用いていないのに、読み込んだデータをソー トして結果を表示する。 データか文字の並びならソートはうまくいくのだが、数 字になると間違った順序になってしまう。文字列として 15 と 3 を上交すると、 3 より 15 がさきになるからだ。デ フォルトでは文字の並びとしてソートされるので、数値頂 に並べたいときは数字としてソートするように指定しなけ れはならない。 リストに含まれる値を文字の並びとしてソートするので なけれは、ソート・サプルーチンを使う必要がある。ソー ト・サプルーチンに関する下記のインターフェイス規則に のっとっていれは、独自の上交関数を組み込んで使うこと かできる。 ・ソート・サプルーチンは、リスト内の 2 つの要素を引 数として繰り返し呼び出される。 ・ 2 つの要素は、スカラー変数 $a と $b ロ翻タされるに れらを局所変数にしたり、 @ーを参照する必喫はない ) 。 ・ソート・サプルーチンでは、 $a と $b を上交して、ど ちらが大きいかを決める必要がある。 ・上交の結果、 $a が $b より小さいか、等しいか、大き いかによって、それぞれ一 1 、 0 、十 1 を返す。 C 言語のライプラリ関数 qsort に詳しい人なら、これ らの条件に見覚えがあるにちがいない。それもそのはす、 Perl は qsort を利用しているので似ているのは当然であ UNIX MAGAZINE 1996.7

4. UNIX MAGAZINE 1996年7月号

目に数字を書く " と考えたはうか解しやすいでしよう たとえば、 fill ( 3 , 3 ) ーー ( 6 , 3 ) ーー ( 6 , 6 ) ー ( 3 , 6 ) ーー cycle ; を実行すると、 METRFONT の方眼紙は次のようになり ます。 000000000 000000000 000000000 000111000 000111000 000111000 000000000 000000000 000000000 こで、次の命令を実行します。 -(2,5)--cycle; fill ( 2 , 2 ) ~ ( 5 , 2 ) ーー ( 5 , 5 ) ー 0 ると、たいへんな量のメモリが必要です。実際にはもっと 効率的に記慮していますが、概念としては、、方眼紙のマス レ = 最初の命令では、ピクチャーどうしの加算をおこないま す。たとえば、 addto レ also X " は、レ : = レ十 X と 同じ演算を実行します。しかし、 addto を利用して書いた ほうか演算処理中のメモリ使用量が少ないので、効率的か nullpicture くピクチャー変数〉く変杉命令〉 くピクチャー変数〉ーくピクチャー変数〉 くピクチャー変数〉十くピクチャー変数〉 くピクチャー式〉とは、 つ高速に処理できます。 clearit は、 plain. mf のなかで次のようにマクロ定義さ チャーか初期化できます。ピクチャーをクリアする命令 紙を表し、この値をピクチャー型変数に代入すればピク などのことです。 nullpicture は、つねに真っ白な方眼 すると、 METAFONT の方目慮氏の状態は次のよ引 化します ( 中央の部分が、 2 " に変わっています ) 。 000000000 000000000 000000000 000111000 001221000 001221000 001110000 000000000 000000000 こ変 れています。 de f clearit currentpicture : く変杉命令〉では、 nullpicture enddef ・ パスの変杉に利用してきた shifted や この METRFONT の方目氏かピクチャー (picture です。 METAFONT では、同時に複攵のピクチャーを 扱えます。そして、これらはピクチャー型変数としてオ褓内・ 参照できます。 addto と cull ます、ピクチャーを変化させる命令 addto と cull に ついて勉強しましよう。・変の説明のために、 2 つのピク チャーを次のように定義しておきます。 picture レ , X ・ 000000000 000000000 000111000 8001 } 1008 000000000 000000000 追加命令 (addto) 000000000 000000000 000000000 88 Ⅲ 8888 001110000 000000000 scaled 、 rotated などがそのまま使えます。ただし、 ro- tated に指定できる角度は 90 の倍数た、けです。 addto 命令を用いた例を示しましよう。 addto レ also X ・ を実行したとき、ピクチャー変数 V には次の値カ武入さ ー 1 を表します ) 。 を実行したときは、次の値が代入されています ( 、、一 " は addto V also —X; また、 000000000 001110000 001221000 レ = 001221008 000000000 000000000 れています。 000000000 000000000 000111000 00 ー 001000 00 ー 001000 00 ー ー 0000 000000000 addto は、次の形式で使用します。 addto 〈ピクチャー変数〉 doublepath くパス〉 addto くピクチャー変数〉 contour くパス〉 addto くピクチャー変数〉 also くピクチャー式〉 118 マス目の値が 0 かマイナスの場合、 METRFONT はそ のピクセルを白として表示します。ですから、 addto 命令 を使えは図 2 のような図形の加減算カきます。 UNIX MAGAZINE 1996.7

5. UNIX MAGAZINE 1996年7月号

きます。 ます。 変数名 [ 添字 ] = 値 この例からも分かるように、配列の各要素の値は次の Korn シェルの酉改に、次の形式でイ直を代入して定義し いう文字列を代入するときは、次のようにコマンドを実行 たとえは、 array という酉改」の 1 番目の要素に first と $ { 変数名 [ 添字 ] } ガ去て参照します。 first $ echo ${array [ 1 ] } $ array[l] =first します。 、、位置パラメー の要素をそれぞれ代入しなけれはならない " 点です。たと タか複数の値を一度に代入できるのに対し、配列では個々 位置パラメータと配列の大きな違いは、 $ cat ーⅡ example 入するガ去は分かるでしよう。 ログラムとしては無未ですが、配列の要素に順次値を代 次の例は、酉冽を使ったシェル・プログラムです。プ ルと同しように実現されていれば・・・・と思うのですが。 し形式でできるので、 Korn シェルの酉改」機能も C シェ としなけれはなりません。 C シェルでは、この 2 つか 1 司 $ set array [ 1 ] =a array [ 2 ] =b array [ 3 ] =c して a と b と c を代入するには、 とするだけですが、酉リ array の 1 、 2 、 3 番目の要素と $ set a b c えは、位置パラメータに a と b と c を代入するには、 1 3 4 5 6 7 # ! /bin/ksh for in * . tex do let j=$j + 1 echo ${file [${j}]} UNIX MAGAZINE 1996.7 UN Ⅸへの招待⑩ 変数は、配列の添字を決定するために使います。初期 値は、、、 j = 0 " で 0 を代入します。 3 行目の for では、カ レントディレクトリにあるキ長子が、、 . tex " のファイルに 対し、 d 。から done までのコマンドを繰り返します。 5 行目の let は Korn シェルの糸ムみコマンドで、引数で 指定された算術式を実行します。このプログラムでは、 j の値を 1 っ増やして配列の次の要素を示します。 6 行目 て酒己列 file の要素 $ { j } に値を代入し、 7 行目の echo で その値をエコーバックしています。この 2 行の中括弧の 使い方に注意してください。やや複雑ですが、基本的に変 8 done で参照することさえ忘れなけれは、を間違うことはな $ { 変数名 [ 添字 ] } $ { 変数名 } 数の値は、 いはすです。 パラメータのさまざまな操作 ば、、 f 。。は設定されていません " という文字列に置き換 き換えます。次の例では、変数 foo が未設定であれ 、、変数 " 未設定の場合、 $ { 変数 : ー値 } 本を、、値 " で置 ・ $ { 変数 : ー値 } か紹介しましよう。 といったことかて、きます。これらの代表的な操作をいくつ ラーメッセージを決めたり、パラメータの値に加工を施す タの省直を設定したり、パラメータが未設定の場合のェ この括弧内では、ちょっとした記号を使って、パラメー $ { 変数名 } 中瓜で囲んで参照します。 何度も説明していますが、パラメータの値は変数名を f00 は設定されていません $ echo $ { f00 : ー f00 は設定されていません } $ unset f00 えます。 163

6. UNIX MAGAZINE 1996年7月号

PATH やディレクトリ変更時の検索パスを値としてもつ CDPATH などです。これらには、複数のディレクトリ名 ( コロン ) を区切り文字として代入されています。 $ PATH= : : /usr/bin : /usr/ucb : ${HOME}/bin: $ e cho $PATH : /usr/bin : /usr/ucb : /usr/home/aya/bin : $ CDPATH=/usr/home/aya: /usr/home/aya/work $ echo $CDPATH /us r /home /aya : /usr/home /aya/vork コロンカイ直の区切り文字なら、これらの変数には複数の 値カイに入できる、すなわち Bourne シェルや Korn シェ ルでも複数の値をもつ変数カ硬える、と考えられなくもあ りません。しかし、これらの変数では、コロンも含む ( 長 い ) 1 つの文字列を値として代入しているだけです。シェ ルは、これらの変数にかぎり、 ( コロンを区切りとして ) 内部で文字列を分解します。ほかの変数については、 のような処理はしません。 位置パラメータ Korn シェルでも Bourne シェルでも、複数の値をも たせることかでき、しかもユーザーカ咽々刎直を個別に参 照できる変数が 1 つだけ提供されています。これが、、位 置パラメータ " です。位置パラメータの値は、 set コマン ドを使って設定します。 set 0 ゼ 2 3 位置パラメータの最初刎直は I ム 2 番目の値は拠 12 、 3 番目刎直は 13 、 ・・となります。 このように言聢した位置バラメータの個々の値は、 で参照します。れは、何番目の値かを示します。たとえ ば、 1 は $ 1 、 0Z2 は $ 2 、 ・・という具合にそれぞれ の値が参照できます。例を見てみましよう。 $ ls * . tex 1 . t ex 2. tex 3 . tex 4. tex 5 . t ex UNIX MAGAZINE 1996.7 1 . tex 3. tex 5 . tex $ echo $ 1 $ 3 $ 5 $ set ( 1s *. te* UN Ⅸへの招待⑩ このほかに、位置バラメータのすべての値を参照する $ * や位置パラメータの数を参照する $ # も使えます。 シェル・プログラム実行時の引数 UNIX のコマンドと同じように、シェル・プログラムで も実行時に引数カ甘旨定できます。指定した引数は、 Korn シェルの位置パラメータの値として保存されるので、プロ グラムのなかでそ直を使うには、 と記します。れでは、位置バラメータの何番目の値であ るか、つまり何番目の引数かを数字旨定します。たとえ ば、 1 番目の引数は、 4 番目の引数であれば、 も使えます。 $ 4 という具合です。すべての引数を参照するために、 161 このように言己主します。 シェル・プログラム実行時の引数を参照する場合には、 third first $ echoarg first second third $ chmod + x echoarg echo $ 3 echo $ 1 # ! /bin/ksh $ cat echoarg ムを作ってみましよう。 コーノヾックする echoarg という名則のシェル・プログラ たいへん簡単な例ですが、 1 番目と 3 番目の引数をェ

7. UNIX MAGAZINE 1996年7月号

UN Ⅸへの招待⑩ つの変数に複数の値を設定できます。たとえば、 name と いう変数に aya と yusuke と seiji という 3 つの値を代 入するには、次のようにコマンドを実行します。 % set name=(aya yusuke seiji) % echo ${name} aya yusuke seiJ i この値は、 $ { 変数名 } という形式て参照できます。 あらかじめ名前 ( 変数名 ) カ鴃まっていて、シェルのな かでなんらかの彳齬リをもっているパラメータもあります。 これまて紹介したなかでは、次のパラメータがこれにあた ります。 コマンドの置換機能を使って、変数に複数の値を代入 することもできます。たとえは、現在の日付と時間を変 PSI : 1 次プロンプト ( 値は $ ) 数に代入するときは次のようにします。 Korn シェルのフロンプトには、このほかに 2 次プロ ンプト (PS2) 、 3 次プロンプト (PS3) 、 4 次プロンプ % set today='date ' % echo ${today} ト (PS4) がある。 1996 年 05 月 04 日 ( 土 ) 02 時 21 分 16 秒 JST PATH : コマンド検索ノヾス % dat e 1996 年 05 月 04 日 ( 土 ) 02 時 21 分 29 秒 JST CDPATH : cd コマンド実行のディレクトリ検索パス HOME : ホームディレクトリのパス名 OLDPWD : 1 つ前のカレントディレクトリ このようにして 1 つの変数に代入した複数の値を参照 する場合は、 これ以外にも、ユーサーが独自にパラメータを定義し て値をもたせることができます。それには、さきほど書 $ { 変数名 [ 司 } いたとおり、シェルに対して次のように入力します。 とします ( れでは、変数の何番目の値かを指定します ) 。上 己の例で設定した today の 2 番目と 3 番目の値を参照し てみましよう。 たとえば、 myname という変数に aya という値を代入 したいときは、 % echo ${today [ 2 ] } ${today [ 3 ] } 02 時 21 分 16 秒 JST $ myname=aya と入力します。この値 (aya) を参照するときは、次のよ うにします。 $ echo ${myname} aya 変数名 = 値 一三ロ 1 つの変数に複数の値を代入すると、シェル・プログラ ムのなかで、 ・ ( 複数の単語を出力する ) コマンドの実行結果を、 1 っ の変数にまとめて保存できる ・ 1 つの変数の複数の要素に対し、繰り返し同し処理がで 対話形式でシェルを使っている場合、ユーサーか独自 きる のパラメータを必要とする場面はあまりないかもしれま など、便利なことがいろいろあります。しかし、残念な せん。どちらかというと、シェル・プログラムのなかで がら、これは C シェル固有の機能で、 Bourne シェルや 利用するのカ立 - ヨ勺てす。 Korn シェルでは提供されていません。 複数直をもつパラメータ Bourne シェルや Korn シェルでも、複数の値を代 入できる ( あるいはイ尉寺している ) ようにみえるパラメー Bourne シェルや Korn シェルでは、 1 つのノヾラメー タに 1 つの値しかもたせられませんが、 C シェルでは 1 タがいくつかあります。たとえは、コマンド検索パスの UNIX MAGAZINE 1996.7 160

8. UNIX MAGAZINE 1996年7月号

CGI の利用 by John W. Fawcett and Robert W. Jepson ■ f 「 om LJNIX REVIEW CGI(Common Gateway lnterface) と HTML の く FO > タグは、 Web 上でユーサーがなんらかの対言乱勺な 操作ができるように考案されたものである。く FORM > タグ と CGI を利用したアプリケーションを作成することで、 ューサーは単純な乍、たとえば検危囲や検索文字列を 指定したり、リストから〕尺させてナピゲーションをおこ なったり、ゲームで遊ぶことさえできる。 多くの CGI アプリケーション ( 通常スクリプトと呼ば れる ) は、シェル・スクリプトや Perl 、 Awk などで作 成された単純な UNIX フィルタである。より複雑なアプ リケーションは、 C や C 十十などのコンパイラ言語で書か れている。 この記事では、われわれがひどく複雑な CGI アプリ ケーションを作成した際の経験について述べる。われわれ は、、、 stock Market Challenge" というクライアント・ サーバータイフ。の CGI アプリケーションを C と C 十十を 使って作成した。ューサーは自分の有価証券を管理し、は かのプレイヤーと競うためにアプリケーションと対話する のである。 Web プラウザで http://smc ・ sierra.com を 開けば、このゲームを試してみることかて、きる。このゲー ムはセレクタブル・ピットマップとテープルの両方を利 用しているため、実行には HTML 2.0 に対応したプラ ウザが必要である。最初にゲームをするときには、 CNew User] オプションお尺して自分が使用するゲームプレ イヤーを作成する必要がある。 CGI の基礎 標準的な UNIX フィルタと同様に動作しなくてはなら なによります初めに、 CGI プログラムやスクリプトは 84 ない。つまり、標準入力 (stdin) からデータを読み込み、 標準出力 (stdout) に書き出すのである。ューサーがプ ラウザでページ転送をともなうような処理を要求したと き、 HTTP デーモンはページを受け取り、 CGI プログ ラムまたはスクリプトを起動ける。矼念的には、このとき HTTP デーモンは (CGI プログラムの ) 標準入力と標 準出力の両方をユーサーのプラウサに接続されたソケット に割り当てると考えればよい。プログラムで scanf( ) や printf( ) を使う場合には、実際にはインターネット接続 に対して読み書きを実行することになる。入力される情報 は、彳あする標準的なフォーマットのフォームから受け取 る。出力は、標ま勺な HTML フォーマットのテキスト として書き出さなくてはならない。誤ったフォーマットの テキストを出力したことが原因で、 Netscape のサーバー 工ラー 500 番を惹き起こすことがよくある。 もうすこし技彿頑勺な言い方をすると、実際にはクライア ントのプラウサから送られるデータを HTTP サーバーが 読み込み、送られてきたフォームの METHOD / ヾラメー タを詩ヾ、データを環竟変数 (QUERY-STRING) また は標準入力に変換する。次いで、スクリプトまたはプログ ラムについて fork(2) と exec(2) を実行する。スクリプ トまたはプログラムか驃準出力に書き込んだ場合は、サー ーはその出力を見てエラーがないかを十ヾたのち、クラ イアントのプラウサに渡す。 スクリフトやプログラムは 1 ステップとして起動され ることを忘れてはいけない。つまり、 HTTP デーモンに よって起動さ exit したときに終了させられる。プログ ラムは、ユーサーか次に送ってくる情報を見ることはでき ないのだ。ューサーが報を送るたびに、プログラムカ噺 しいプロセスとして起動されるのである。ューザーがシス UNIX MAGAZINE 1996.7

9. UNIX MAGAZINE 1996年7月号

連載 / プログラマー入門ー① long は 8 パイト あったりすることに農れているかもしれません。 トホームによって int が 2 バイトであったり 4 バイトで と信しているでしよう。 PC を使っている人は、プラッ しか知らない人なら、おそらく int も long も 4 バイトだ というのは難しい話です。ワークステーション上の UNIX C 十十でも、 int 型や I 。 ng 型カ可バイトで表現されるか そもそも、 UNIX MAGAZINE 1996.7 あとで説明します ) 、 size 。 f の出番がほとんどありません。 っているし、そもそも構造体もないのでにれについては うと、答は、、 N 。 " です。基本的な型のサイズは仕様て快ま それでは、 Java にも sizeof が用意されているのかとい 数を詩ヾるための sizeof が用意されています。 移植性のあるコードを書くために、 C 十十には型のバイト が何バイトで表現されるのかは機種依存でした。そこで、 前節に書いたような理由で、 C 十十では int 型や long 型 sizeof はありません コードを書くと痛い目に遭います。 慣れている人は、 I 。 ng が 4 バイトであることを想定した と決められました。 int 型も long 型も 4 バイトの竟に long 型→ 8 バイト ( 64 ビット ) int 型→ 4 バイト ( 32 ピット ) 具一勺には、 Java の int 型と long 型は、 ような言語 f け策を採用するわけにはいかないのです。 動かないと困りますよね。そのためにも、機種に依存する ログラムを手許の PC 互換機にロードして実行したとき、 せん。だって、ワークステーション上のアフレット・プ Java は、言言士様に、機種依存 " の部分を認めていま するかは機種に依存します。 と回り大きな型になっていますが、実際に何バイトで表現 という決め方もそうです。 I 。 ng 型はⅲ t 型と同しか、ひ int 型よりも大きな整数は long 型とする また、 2 バイトであったり 8 バイトであったりします。 という決め方をしたため、 CPU の不鶤頁によって int 型が int 型は計算機にとって自然なバイト数にする enum もビットフィールドもありません C 十十を日常的に使っているプログラマーからも、 「 enum? ビットフィールド ? ああ、そんなもんもあっ たね」 って言われるくらい、 enum とピットフィールドは景多 ) 薄 い存です。 マクロ定数か const があれば enum の代わりになるし、 ピット演算子の & やーなどを使って自分でビットを操作す るほうがピットフィールドよりも気楽です。実際、 enum をまったく使っていないプログラムは珍しくありません し、ビットフィールドを使ったプログラムなどめったに お目にかかれません。 Java は、、なるべくシンプルな言語仕様 " を目指してい るので、あまり人気がない enum とビットフィールドは 潔く捨ててしまいました。 # define はありません おそらく、 C や C 十十の経験者が Java のフログラミ ングで真っ先に悩むことになるのが定数の扱いではないで しようか。則節では、 Java には定数を扱うための enum がないと言いました。それでは、ほかのカ 1 去はどうなって いるのでしよう。 A さんは、 Java でトランプゲームのプログラムを作ろ うとしました。カードの枚数を定数値としてどこかに保存 したくて、 C と同オル ) マクロ定数、 #define CARD_COUNT ( 13 * 4 + 2 ) を定義しました。リスト 3 がそのコードの一部です。 これをコンパイルすればちゃんと動く、 ・・はすだっ たのですが、世の中そんなに甘くはありません。図 1 のよ うなコンパイルエラーになってしまいました。工ラーメッ セージは、 「こんな文字は予定外だ」 と言っています。どうも、 cpp ( プリプロセッサ ) に処理 してもらうつもりのマクロの # をみつけてエラーメッセー ジを出したようです。 77

10. UNIX MAGAZINE 1996年7月号

寺集 2 モーレッ UNIX 図 8 らくがきを保存 0 え t Save Load rakugaki. txt Use Contr01—S and Contr01—R to Search. Sa 「 i10 : 「 ak k え . txt れ 0 file yet kgou ha ii tenki dana— kon—na hi ha shigoto 材 0 sabotte , shitai. , sarunata s 獷 ga kita! shigoto nodoranakga! ! 場合は、コマンド行で xedit を起動する際、ファイル名 [ 3 ] 19689 % xedit rakugaki . txt & を引数としてケえます。 monkey : どや、何も考えすに文字を打てるし、憶えや L 。 ad ボタンをクリックするガ去も使えます。 ボタン右の入力フィールドにファイル名を入力してから あるいは、何も指定せすに xedit を起動し、コマンド んからな。あとも詰まってることやし、さっそく m 。 nkey : こんなとこで引っかかってたら、さきに進め 、、 3 分クッキング " ですね ! あつぶる このくらいなら、ちょろい、ちょろい ! ! まさ すいやろ ? twm の言定にとりかかろか。 あっぷる : はい、望むところです ! 0 で、 X ウインドウ・システムがインストールされているマ シンにはかならすあるといっても過言ではありません。 丘では fvwm など、 twm よりも見栄えがよくて機能 が豊富なものカ磴場し、そちらを利用する人が多いようで す 12 。しかし、マシンによってはインストールされていな い場合もあるため、基本中の基本である twm の使い方を 憶えておいて損はありません。 twm て利用できる機能は、専用の設正ファイルによっ て定義されます。タイトルバーやメニューなどの色や大き さ、ウインドウを操作するマウスポタンやキーの割当てな どは、すべて設定ファイルの書き方に依存します。 あつぶる : でも、私はいままで twm の成疋ファイルなん て作った憶えはないですよ。それでもちゃんと動いて いますよね。もしかして、 monkey 先生が用意してく れてたとか ? monkey : そうそう、かわいいあつぶるちゃんのために 寝る間も惜しんで・・・・・・と言いたいとこやけど、ちょっ と違う。 twm にはな、システムに共通の言聢ファイル とユーサーが軸自に用意する言ファイルがあるんや。 twm を起動けると、ますューザーの設定ファイルを探 し、なかったら共通の設定ファイルを使うんや。そや からあつぶるちゃんが自分で用意してなくても大丈夫 やねん。 あつぶる : ヘー、そうなんですか。しゃあ、どっちもない ときはどうなるんですか ? twm か怒ってエラーになっ ちゃう ? monkey : なかなか鋭いな。両方とも見つからへんかっ たら、 twm のプログラム自体にビルトインされてる設 定を使うねん。ただ、ピルトインの設疋ちゅうのは、た いがいはシステム共通の成疋ファイルとはは 1 司しゃ。管 理者や twm をインストールした人がマメやったら、共 通の定ファイルをいじって使いやすくしてるかもしれ へんけど。 あつぶる : ふーん。 monkey 先生、あまりマメじゃない twm の設定 んですねえ。 monkey : つ、 ・・さあさあ、さっさとさきに進も ! X ウインドウ・システムで、ウインドウの移動や大き さの変更、アイコン化など、画面上のウインドウをまとめ て管理するのがウインドウ・マネージャーです。前回紹介 した twm はもっとも標ま勺なウインドウ・マネージャー UNIX MAGAZINE 1996.7 システム共通の成疋ファイルは、 /usr/X11/1ib/X11 /twm/system ・ twmrc として置かれています。下線部は 12 私たちも、」けごん使っているのは fvwrn でナ。 23