プログラム - みる会図書館


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

1. UNIX MAGAZINE 1996年2月号

連載プログラマー入門ー・ 図 12 HotJava の WWW ページを新する仕組み 人間 HotJava による / ・ⅥーⅥ 7 ・ページの表示 HotJava がⅥーⅥーⅥーベージを表小する・日はみのなかで、 重要なポイントが 1 つあります。それは、 「 HotJava は専用の WWW サーバーを必要としない」 ということです。 たとえば、 Netscape には機密保護の機構が入って います。ところがこの機構は、 Netscape のプラウサと Netscape の WWW サーバーの組合迂でなけれは・重川 しません。たとえは次のような組合せでは動かないので、 ューザーカリ用するときに注意が必要です。 ・ Netscape のプラウサと CERN の WWW サーノヾー ・ Mosaic と Netscape の WWW サーノヾー 同しように、 HotJava も HotJava 専用の WWW サ ーバーとの組合でしか Java 特有の機能を利用できない としたら、ひどく不便だったでしよう。 Java«*—ジを公 開したい人は、ます HotJava 専用のサーバーを立ち上げ なければなりません。 しかし嬉しいことに、見る側では Java 対のプラウザ が必要ですが、公開する側は、すでに WWW サ→ヾーを 立ち上げているのなら、 Java ページの公開のために必要 なイ檪は次の 2 つだけです。 ・ Java 用の HTML ファイルを作る ・ Java プログラムを開発する なぜ、 Java は専用サーバーを必要としないのでしよう。 その仕掛けは、前項で説明した、インライン・イメージを 含む WWW ページの表示の場合に似ています。 図 12 に示したように、処理の基本的な流れは、インラ イン・イメージを含む HTML ファイルを表示するときと 同しですが、以下の点が異なります。 ・プラウサはイメージの代わりに Java プログラムを要求 する ・ HTML ファイルを要求したのと同し WWW サーバー に Java プログラムを要求する ・ www サーバーはイメージの代わりに Java プログラ ムを返す ・プラウザはイメージの代わりに Java プログラムの結果 を表示する = ( 2 ) HTML ファイルを要求 ( 3 ) HTML ファイルを返す (1) URL を指定 サーバー ブラウザ ( 4 ) HTML を表示 ( 5 ) Java プログラムを要求 ( 7 ) Java を実行し 表示 (6)Java プログラムを返す プラウザは、 HTML 中の applet タグを解釈して、 WWW サーバーに Java プログラムのファイルを要求し ます。また、 WWW サーバーカした Java プログラム を、、実行 " して、その結果をプラウザ上に表示します。 れらはふつうのプラウザにはない機能なので、 Java 専用 のプラウザが必要なのです。 WWW サーバーはイメージの代わりに Java プログラ こでは HTTP プロトコ ムをプラウサに返すのですが、 ルク寺徴か効いています。 HTTP プロトコルでは、 WWW サーバーはプラウサ に要求されたファイルをそのまま返し、その中身カ可であ るかについては干渉しません。そのため、プラウサから要 求されたのがイメージファイルであろうが、 Java プログ ラムのファイルであろうが、、、、サーバーは同じよう に処理できます。こオ功ゞ、 HotJava 専用の WWW サー バーを必要としない秘訣なのです。 次回はいよいよ Java ページの作成 今回は、 Java と HotJava の概要と仕組みについてお 舌ししました。次回からはいよいよ、 Java ページの作成 ガ去を紹介します。開発環竟や、 HTML ファイルの書き 方、お手軽なアニメーションの作り方、 Java で用意されて いるライプラリを使った処理について解説する予定です。 ( あらい・みちこ ASTEC) 1 三ロ 107 UNIX MAGAZINE 1996.2

2. UNIX MAGAZINE 1996年2月号

連載 / プログラマー入門ー・ 図 8 工事中のデューク君のデモ UNIX MAGAZINE 1996.2 3 彼の名前はデューク君。 HotJava のマスコット人形です。 既存のタグに属を追加したり、新しいタグを増やしたり っと違います。 Netscape は、」助日したい機能にあわせて ところで HotJava の長カ去は、 Netscape とはちょ スをしたりエ事をしたりします。 の西洋てるてる坊主のような奴 3 が、プラウザの上でダン 実際に動くデモをお見せできないのが残念ですが、図 8 なさそうなことに気づくでしよう。 を見たことがある人なら、ふつうの HTML ファイルでは HotJava も HTML を長しました。 HotJava のデモ 戻しましよう。 また寄り道してしまいました。話を HotJava の拡張に 機能か充実しているのですから。 の缶衂には必喫だけれど、プラウザでは利用しそうにない ウザに必要な描画聞系の機能が少ないわりには、システム ラリの占前えを眺めれは像がっきます。なにしろ、プラ 当の事情のようです。このことは、 Java のクラスライプ プリケーションとして HotJava を作った、というのか木 でも、、はじめに Java ありき " で、 Java を利用するア Java 諞よのです きるようにすることで、そのためのプログラミング言語が す。別方向とは、 WWW の表示去をプログラミングで うに、 HotJava も別方向の拡張をおこなったプラウサで Netscape カ融自の拡張をおこなったプラウザであるよ もう 1 人の反逆児—HotJava 洋裕第一も、朝、気第、一 ”い増い物当 0 は 0 ド , ! 河いを 0 ま、」ま町 する方針です。 デューク君刎列ならさしすめ、 く duke> というタグを追加し、 や、、工事中 " を、 く duke move="Dance"> あるいは、 、、動き属性 " に対して、ダンス " く duke move="UnderConstruction"> と指定したようなものです。 グラムを実行することは分かりましたが、そのプログラム いよいよ HotJava のイ督はみ編です。 HotJava カワ。ロ HotJava の仕組み でしようか。 param タグて指定された値を Java プログラムに渡す」 「 applet タグは任意の Java プログラムを呼び出し、 もうすこし表現を変えれば、 param : Java プログラムに渡す引数を指定する する applet : Java で書かれたさまざまなプログラムに対応 ません。 グのように、 1 つの表現力 1 去に対応しているわけではあり これらのタグは、表や箇条書などの HTML のはかのタ ゲームかできるのです。 ったり、 TIC TAC T00 ( 三目並べ ) や HUNGMAN このタグだけで、デューク君か飛び跳ねたり、音が鳴 p aram applet は、次の 2 個のタグを j 助日することだけでした。 しかし、 HotJava が HTML に対しておこなった拡張 ・どこで実行されるのか ・どのようにして手に入れ ・どこから は、 103

3. UNIX MAGAZINE 1996年2月号

Cross-Platf 0 「 m 0 et - ノする 067 のクラスライフラグ 「い・一 ec い & 第第は 々ー” / ( 2.0 ん試 4 TM 0 引泓 CPT ー臼 B.: し ! 物 ( れ靆ハ山一 ! ゆ 0 宿を ! 地、 にに一響に 日 ox 01 0 1 0 をゖ震ト載 Mictff3 羈 (F) 仮集 ( E ) 検索 ( S プロシ、 1 外 ( P) リソ -7 ( ロココ - ロ ! ( の : Release 町に一ドド N 、れ 0 、 prlrn 置 y わ第 : 日を第施 n ー・ p 日Ⅳ : 0 凹 3 当ⅱ ( ) 3 いリ 「ル tion 0 0 ん国ゅ fUeSelection 尾 e 0 File 3 ct 加陬」 0 tirectories H : 可 2. ⅶ 0 ぉ c 可 2.0 Füe Name: 面 x. c 面 x. h fsbox-i bo ⅲェ ト面 x ⅵ n. d 可 fstM1xvin.exe 面 x ⅵ n ak 信面 x ⅶ凵山 j hSTEC- X ! な rl ベストセラ—GUI ビルター UIM / X に統合すれば、 UIM/X の機 能を使って通常の Motif フログラムとい ] 様に UN Ⅸ用のプログラム を開発することができます生成されたソースコードを Windows でコンパイルして Windows 川の Cross-PIatform Toolset ライプ ラリとリンクすれば、同じ機能でほば同じ見た目の GUI を持つ Windows 川のプログラムを作ることができます UNIX と Windows が混在し、共通の見たⅡと操作が必要なクラ イアントサーパー環境の GUI 開発の決め手としてお使いトさい。 動作環境 UIMX : SPARCstation SunOS 4.1.3 、 Solaris 2.4 等 Windows : 3.1 (Win16) 、 95 、 NT 3.5 、 NT 3.5.1 ( 以上 Win32) Cross-PlatformToolset は複数のプラットフォームから共通の API で使うことのできる GUI のクラスライプラリです現在のバージョン は、 UNIX 上の Motif の GUI を持つプログラムと、 W1ndows 上の (Wmdows の GUI を持つ ) プログラムから使うことができます Cross-Platform TooIset で提供するクラスはアプリケーションレベル のクラスで、 2 つのライプラリとして提供されます。 1 つは、 Motif 用のクラスライプラリで Motif のウイジェットを使って実現してい ます。もう 1 つは、 Windows 用のクラスライプラリです。 0 A S T E C 株式会社アステック営業部 お問い合わせ先 〒 162 東京都新宿区南町 6 BR 市ヶ谷 電話 ( 03 ) 5261-5972 ( 直通 ) FAX ( 03 ) 5261-8574 資料請求 No. 059 E-mail : info@astec. CO. JP ( E - ma ⅱでのお問い合わせは商用ネットをご利用ください。 ) URL : http: 〃 www.astec. CO. jp/CPT/cpt20. html

4. UNIX MAGAZINE 1996年2月号

去万版の Java Development Kit 0 ( 以後、 JDK と 略 ) には、コンパイラやデバッガなど Java 言語の開発 キットが入っていますが、なぜか H 。 tJava は入っていま せん。きっと開発力墹に合わなかったのでしよう。 。 3 版には、開発キット 1 と HotJava の両方カまれ ています。しかし、住 3 版と 0 版には互換生がないため、 0 版の Java プログラムと住 3 版の HotJava を組み合わせ て使うことはできません。 けっきよく、寺点で入手できる Java の最新版には、 開発ツール類は付いていますが、開発したプログラムを実 行するプラウサは添付されていないことになります。 日本人にとってもう 1 つ困るのは、 Java や HotJava が日本言ヒされていない点です。 Sun は HotJava 住 3 版 の日本語版を提供していないので 2 、一般に配布されてい る HotJava で日本のサイトのホームページを表小すると、 期待はすれの結果になります。 0 版の HotJava は工知点ではまだ公開されていないの でなんともいえませんが、最初から日本言劼ゞサポートされ 連載 / プログラマー入門ーの と思われるかもしれません どうするつもりだ」 「表示できるプラウサがないのに、開発キットだけ出して 則の一節を読んで、 HotJava のイ里人 ることはますないでしよう。 状兄が鮹肖さ 0 版の HotJava カ硬えるようになって この記事力甘曷載されるころには、このような中途半端な ムのピューアとして、またデバッガとして利用できます。 ジを見る " という技はもっていませんが、 Java プログラ のプラウサではないので、、、どこかのサイトのホームペー ムカヾ忝付されています ( 図 1 ) 。 appletviewer は WWW グラムを実行し表小するための、 appletviewer プログラ JDK に HotJava は添付されていませんが、 Java プロ ないので、もうすこし詳しい状況をお話ししておきまし 何も表示する手段がないような誤解を与えては申し訳 いるかも・ そうなればいいなあ。 1 03 版ではデバッガは提供されていませんでしな 2 Sun 以外て独自に日本語化したバージョンがありますが、 関係で入手が凾椡です。 98 ライセンスの 図 1 JDK にイ寸属している appletviewer 0 AppIet 0 0 UNIX MAGAZINE 1996.2 ライセンスも、いまのところ寛大な内容になっていま で入手できます。 いていません。つまり、。版も 0 版もソフトウェアか無料 Java も HotJava も製品版がまだないので、値段はつ 価格とライセンス ということはなくなるでしよう。 できない」 「 HotJava でなければ、 Java の WWW ページを表示 ポートしたプラウザを作るそうです。そうなれば、 Netscape 以タトにも、 IBM と Microsoft が Java をサ 項で HotJava とあわせて紹介します。 ません。 Netscape の入手 : 方法や価格などについては、次 ネットにアクセスする手段がないと入手か難しいかもしれ ・ということは、インター scape はまだ存在しません。 最所版は 2.003 で、 Java をサポートした製品版の Net- ただし、この記事を書いている時点での Netscape の も、 Netscape では表示できます。 ため、 HotJava では文字化けしてしまう日本語のページ ることです。 Netscape 1.1 以降は日本語に対応している Netscape を使うもう 1 つの利点は、日本語か表示でき うになったので、 HotJava の代用品として使えます。 てください。丘の Netscape は Java をサポートするよ す。 Netscape 2.002 よりも新しいバージョンを手に入れ HotJava が出ていなくても、解決手段がもう 1 つありま 言冗者がこの記事を読んでいるころ、あいかわらす 0 版の applet s ねれ ed 0

5. UNIX MAGAZINE 1996年2月号

LJN Ⅸ流プログラミング 64 ク・バイト順序についても説明しました。 最後に挙げたプログラム例では、前回と今回の両方で とりあげた内容を盛り込んでみました。プログラムの長 さは、おこなっている処理を考えれば納得できるもので はないでしようか。このプログラムが簡単に理解できる ようになれは、ネットワークを利用するプログラムの作 成を躊躇する必要はないでしよう。 ( いまいすみ・たかし東京工業大学 ) , の ) く 0 ) { 利用して通信をする場合にたいへん重要な、ネットワー 号の取得について紹介しました。また、ネットワークを 今回は、ソケットに名前を付ける際の注意、ポート番 ☆ レスを取得しています。 gethostbyname 関数を使づて目的のホストの IP アド 場合にはホスト名が指定されたとみなし、前回紹介した #define SERVICE "umtest" #include く netdb . 五 > #include く netinet/in. h> #include く sys/socket . h> #include く sys/types. h> #include く string. 五 > #include く stdio . h> リスト 3 サーパー・プログラム main() int struct struct struct int int char fdl , fd2; s 0 ckaddr_ in s 0 ckaddr_ in servent *SP , len; ret ; buf [ 1024 ] ; saddr ; caddr ; if ( (fdl socket (PF—INET , SOCK_STREAM perror ( "socket " ) ; exit(l); bzero( (char *)&saddr, sizeof(saddr)) ; saddr. sin—family = AF—INET ; saddr . sin_addr . s_addr = INADDR_ANY; fprintf (stderr , "getservbyname : Can' t get port number\n" ) ; if ((sp = getservbyname(SERVICE, "tcp") ) = = NULL) { exit(l) ; s addr. s in_port sp¯>s—port ; if (bind(fdl , (struct sockaddr perror("bind") ; exit(l); if (listen(fdl, 5 ) ) { perror("listen") ; exit(l); sizeof (caddr) ; 1 en if ((fd2 = accept(fdl, perror ( "accept exit(l); while (ret = read(fd2, write(fd2, buf , c10se(fd2) ; for ( ; UNIX MAGAZINE 1996.2 *)&saddr, sizeof(saddr)) く 0 ) { (struct sockaddr * ) &caddr , buf , 1024 ) ) { ret) ; &len)) く 0 ) { 153

6. UNIX MAGAZINE 1996年2月号

LJN Ⅸ流プログラミング 64 リスト 2 getservbyname 関数を用いたポート番号取得プログラム #include く stdio . h> #include く netdb . h> / * ARGSUSED * / main(argc , argv) int argc ; char struct servent *sp , char fprintf(stderr, "Can't find service %s\n" , *argv) ; if ( ()p = getservbyname(* + + argv, "tcp") ) = = NULL) { exit(l); printf ("s-name:\t\t%s\n" sp—>s_name) ; f0 て (p = sp—>s-aliases; *p; p + + ) { printf("s-aliases:\t%s\n", *p); printf ( "s-port : \t\t%d\n" , sp—>s-port) ; printf ("s-proto:\t%s\n" , sp->s—proto) ; exit(O) ; / * NOTREACHED * / 含まれます。さきほどの telnet の例では利用していませ んが、 3 番目以降のフィールドが存在するときにはその フィールドの内容かオ褓内されます。 s-port が目的のポー ト番号です。最後の s-proto には、 TCP か UDP かを 示す文字列かオ褓内されます。この関数を使って書いたプ ログラムがリスト 2 です。このプログラムでは、 TCP のみを調べるようにしています。 . /getservbyname telnet これを実行すると、 s_name : s—port : s—proto : telnet 23 t cp のような出力か得られます。 ホスト・データベースについて gethostbyname 以 外にも関数か準備されていたように、ポート番号データ べースにもいくっかの関数か準備されています。ポート 番号とプロトコルから servent 構造体へのアドレスを返 す getservbyport 、データベースに本褓内されたすべて の情報を処理するための getservent 、 endservent 、 setservent などです。これらの関数の使い方は、ホス こで ト・データベースのものとほとんど同じなので、 は詳しく述べません。前回のホスト・データベースを扱 う関数の説明とオンライン・マニュアルなどを参照して ください。 これらの関数群が返すポインタの指す servent 構造 体は、ライプラリ側で静的に確保された領域に置かれま UNIX MAGAZINE 1996.2 す。関数を複数回呼び出す場合には、ポインタのみでは なく、データの内容自身をコピーしておかないと格納さ れる情報が変わってしまうので注意しましよう。 このデータベースを変更できるのはスーパーユーサー だけです。データベースへの登録に値するサーピスをお こなうプログラムを作成した場合は、スーパーユーサー と相談してください。データベースの変更は、サー 151 順番で並べられるのでしようか。あるマシンではもっと トを使って表現されます。この複数のバイトは、どんな 通常、 long 型の値は 4 バイト、 short 型の値は 2 バイ うために起こります。 はなく、バイト順序と呼ばれるものがマシンによって違 示されます。これは、プログラムの入力を誤ったわけで す。マシンによっては、ポート番号として異なる値が表 ると、プログラムの出力結果が正しくない場合がありま リスト 2 のプログラムをコンパイルして動かしてみ ネットワーク・バイ村醉 バー上で services ファイルを変更します。 て配布することも可能です。この場合には、 NIS サー ならは問題はありません ) 。データベースを NIS を使っ ( もちろん、サーバーが動作するマシンと同一のマシン 更しても、クライアントはポート番号を得られません ければなりません。サーバーか動作するマシンだけで変 やクライアントか動作するすべてのマシンでおこなわな

7. UNIX MAGAZINE 1996年2月号

の DGRAM 型のソケットでは、クライアントのソケッ トに関しても bind システムコールを用いて名前を付け ていました。これは、サーバーが情報を返すためにクラ イアント側のソケットの名前が必要だったからです。 しつは、 STREAM 型のソケットにおいてもクライ アント側で b ⅲ d システムコールを使って名前を付けら れます。この場合、プログラムを動かすマシンのもって いる任意の IP アドレスを指定できます。もちろん、自 分を示す 127.0.0.1 も指定できます。サーバーの場合に は複数のアドレスをもっている状況も考慮して、任意の アドレスを示す工 NADDR-ANY を指定する必要がありま すが、クライアントではこのような考慮は不要です。た だし、自分自身のもつアドレス以外はもちろん指定でき ません。アドレスとして INADDR_ANY も指定できます。 この場合は、システムが解釈して適当なアドレスか指定 されたものとして扱われます。 INET ドメインのソケットに名前を付ける際には、も ちろんポート番号も指定しなけれはなりません。 注意してはしいのは、 1 つのマシンで同しポート番号を もつソケットを複数作成できないことです。前回の例の ように、サーバーと同じマシンでクライアントを動かす ときは、サーバーに用いたポート番号と同し番号をクラ イアントに使うことはできません。サーバーとクライア ントとで同じポート番号を指定すると、あとから起動し たプログラム ( 通常はクライアント ) では、 bind : Address already in use というメッセージが出力され、ソケットに名前が付けら れなくなってしまいます。 ーとクライアントを別々のマシンで動かす際に サー も注意が必要です。なぜなら、あるマシンでクライアン トを複数起動する可能生があるためです。プログラム中 でポート番号を明示的に指定してソケットに名前を付け てしまうと、そのプログラムではつねに同しポート番号 を用いようとします。プログラムか起動されていると、 すでにそのポート番号は使われていますから、あとから もう 1 つ起動してもソケットは利用できません。 これらの理由から、通常は STREAM 型のソケット の名前付けについては bind システムコールは使いませ ん。ソケットに名前を付けないと、 connect システム コールを実行した時点でカーネルが適当な名前を付けて くれます。この機能を利用すれは、複数のクライアント を同一のマシンで重川乍させてもとくに問題となることは UNIX MAGAZINE 1996.2 IJN Ⅸ流プログラミング 64 ありません。 ちなみに、 bind システムコールを実行するときにポ ート番号に 0 を指定すると、カーネルが適当なポート番 号を選んでくれます。 IP アドレスとして INADDR-ANY を、ポート番号として 0 を指定して bind システムコー ルを呼び出すと、 connect システムコールを実行する前 にソケット名を付けることができます。 ポート番号の選び方 サーバーのポート番号の話に戻りましよう。前回の例 題では、サーバーが使用するポート番号とクライアント カ甘旨定するポート番号を同しものにするために、勝手に ポート番号を決めてしまいました。ほんとうにこれでよ いのでしようか。 ポート番号も限られた資源なので、プログラムを作成 するたびに割り当てるわけにはいきません。そこで、プ ログラムを開発している段階では、前回の伊題のように 適当な番号を選んで割り当ててしまうことがよくありま す。しかし、いくら適当に選ぶといっても、すでに利用 されているポート番号は使えません。もちろん、 bind シ ステムコールを呼び出すときにポート番号を 0 として指 定すれは、カーネルがはかのソケットのポート番号と競 合しない適当な番号を選んでくれます。しかし、この番 号はサーバーを起動するたびに変化するので、この値を そのまま用いることはできません。 適当なポート番号を選ぶ際には、ほかのプログラム がそのポート番号を使っていないことがもっとも重要 です。これを調べるには、 netstat コマンドが使えま とします。 netstat —a —n —f inet めには、 用中のポート番号の一覧を知ることができます。そのた 情報を出力するためのものです。 netstat では、現在使 す。このコマンドは、ネットワークに関するさまざまな 149 示しようとします。今回はポート番号を得ることが目的 のオプションを指定しないと、できるかぎり文字列で表 レスやポート番号を数値で出力するためのものです。 も出力します。 -n オプションは、ネットワーク・アド か接続を待っている状態のソケットなどについての情報 覧を表示しますが、一 a オプションを付けると、サーバー netstat コマンドは、現在アクテイプなソケットの一

8. UNIX MAGAZINE 1996年2月号

リスト 1 LocaI Address の取得 netstat —a —n —f inet ー perl ¯ne 'print $ 1 , なので、文字列ではなく数値になるようにこのオプショ ンを指定します。最後の -f オプションでは、調べたい アドレス・ファミリーを指定します。ここで調べたいの は INET ドメインのソケットなので、一 f オプションの 引数に inet を指定しています。 今回は STREAM 型のソケットに関する処理ですか ら、このコマンドの出力のなかで、最初の Proto という 欄が tcp になっているものが対象となります。重要なの は、 Local Address という 4 番目の欄です。この欄は、 コマンドを実行したホストに存在するソケットを示して います。ピリオドで区切られた 5 つの数字 ( もしくはア スタリスクと数字 ) がありますが、このなかの最後の数 字が、利用されているソケットのポート番号です。この 部分だけを取り出して番号順に並べる例をリスト 1 に示 します。実行結果は、現在使用されているポート番号の 一覧になります。 こで出力されていないからといって、その他の数字 を自由に使えるわけではありません。前回もちょっと触 れましたが、 1023 番以下のポートに関してはスーパー ューサーの権限がなけれは利用できません。また、 こで決めたポート番号は、現時点で使われていないだけ で、将来にわたって使用されないことが保証されている わけではありません。 ポート番号の取得 プログラムを作成している途中などでは、このように 適当なポート番号を使うことも多いでしよう。しかし、 実際にプログラムを運用するときは、このような決め方 では不便です。たとえば、なんらかの都合でポート番号 を変える必要が生じた場合、プログラムを再コンパイル しなけれはなりません。もちろん、引数にポート番号を 指定するプログラムを作っておくことはできます。しか し、クライアントを実行する際、現在有効なポート番号 が何番なのかをつねに考えなければならないのも非現実 的です。 こでホスト・データベースを思い出してください。 あるホストを指定するときにはホストの名前を使い、実 際に通信をおこなうプログラムでは、ホスト・データベ ースを用いて目的のマシンの IP アドレスを取得しまし 150 た。ポート番号についても、これと同様なことができれ ば問題は解決します。 じつは、ポート番号に関するデータベースもありま す o/etc/services というファイルを参照してみてくだ さい。このファイルには、次のような行が含まれている ー sort —nu と思います。 telnet 23/tcp これは、 telnet というサーピスが TCP のポート番号 23 を使うことを示しています。 もちろん、このデータベースをアクセスするための関 数群もあります。なかでも、もっとも簡単でよく用いる のが getservbyname 関数です。これは、 getservbyname( 名前 , プロトコル ) という形式で使います。名前には、ポート番号を取得し たいサービスの名前 (telnet など ) を指定します。プロ トコルには、 TCP と UDP のどちらのプロトコルを用 いるかを示す文字列として、、、 tcp" か、、 udp" を指定し ます。 NULL を指定すると、プロトコルは調べられす に、データベースにある目的のサービスに関する情報が 1 つだけ出力されます。多くのサーピスは TCP と UDP の両方で提供されていますが、いくつかは片方のプロト コルだけで提供されています。後者ではポート番号を適 切に得られますが、前者の場合にはどちらのプロトコル に関して値が返されるのかが分からないので注意が必要 です。 getservbyname 関数は、引数で指定されたサービス がポート番号のデータベースに登録されているかを検査 し、登録されていなけれは NULL を返します。サービ スがみつかった場合は、 servent 構造体にその情報を格 納し、構造体へのアドレスを返します。 戻り値の servent 構造体には、 *S_name ; **S_aIiases ; int s—port ; char *s—proto ; という 4 つのフィールドがあります。最初の s- name に は、サービスの正式名称がオ褓内されます。これは、 ser- vices ファイノレの去財刀のフィーノレドの値です。 s-aliases には、サーピスに別名が付けられている場合のリストが UNIX MAGAZINE 1996.2

9. UNIX MAGAZINE 1996年2月号

UNISYS プログラムは、資源である。 無料 紹介セミナー こ案内 ・対象 アプリケーション開発者 2 月 6 日火 第 2 回 1 月 31 日水 第 1 回 ・期日 現する「 TIPPLER/V 」。多様なプラットフォームに対応し、構築したシステムの移植性も優れています。 本格的なオプシェクト指向なので、プログラムの部品化・再利用ができ、開発 / 保守の生産性向上を実 電話 : 03 ー 5546-4618 弊社オープンソフトウェア事業部 ・お申込み / 問合せ先 日本ュニシス本社 15 : 00 ~ 17 : OO ・時間 ます、お話ししたいのは、 「 U n i s c r i p t 」のこと TIPPLER / V の中核となるのは、簡潔で明快なオプジェ クト指向プログラミング言語「 Uniscript 」。クラス ( デー タ ) 、メソッド ( 手続き ) 、フレーム ( 画面 ) 、といった定義は もちろん、分岐や反復などの制御文も備え、本格的な業 務アプリケーションの開発 / 保守において、大幅な生産性 向上 ( C + + 言語に比べ、約 10 ~ 30 倍の高生産性 ) を実現し ます。また、修得も簡単で、 10 日間の教育コースで開発に そして、アプリケーションの実行バフォーマンスは、 というと・・・。 Uniscript の特長は、開発 / 保守の生産性が 高いという点だけではありません。大規模で複雑なアプ リケーションになるほど、その実行速度も気になるとこ ろですが、 Uniscript で開発したプログラムは、最終的に Visual C + + のオプジェクト・コードとして生成されるた め、卓越した実行バフォーマンスを発揮します。 着手できます。 withl 日本ユニシスは、先進の一 T ( 情報技術 ) で、 お客様に最適なソリューションを提供します。 「 TIPPLER/V 体験ツール」を、さしあげま魂 ご希望の方は「 TIPPLER / V 体験ツール希望」と明記し、会社名、住所、所属 ( 役職 ) 、氏名、電話番 号をもれなくお書きの上、日本ユニシス本社広報部まで、 FAX または郵送にてお願いいたします。 フリーダイヤル FAX : 0120-54-8317

10. UNIX MAGAZINE 1996年2月号

リスト 1 元祖・あんまんフォントのプログラム x3 = x5 = x2 十 x2 = x7 = x8 = draw 29 { di て 135 } .. N10 .. {dir 135 } N11 ; 図 1 湯気の言 f 図 35 。 1 : 2 : 3 : 4 : 5 : 6 : 8 : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 27 : 28 : mode—setup , em#:=10pt#, cap#:=10pt#; s#:=l .7pt#; yuge#:=lpt#; % Width is 10pt % Height is 10pt % gap is 1 .7Pt % yuge parameter define—pixels(em, cap,s ,yuge) ; 7 : b=(em-2s)/2; % height 0f anman beginchar("a",em#,cap#,O) ; pickup pencircle scaled 0.4pt ; X12 = X13 = X14 = x9 = X10 = X11 = x2; 1 .2b ; y4 = y5 = 0 ; yl = y3 = b; x4 = xl y2 x6 y6 = y9 draw S ; W ; Y12 = y7 = Y10 = Y13 = y6 + yuge; y8 = Y11 = Y14 = y7 + yuge; .25 [ xl , x2 ] ; . 25 [x3,x2] ; 1 .6b ; ( 0 , 2yuge) yuge ( 0 , yuge) yuge い 5 。 ( 0 , 0 ) 思わない ? それでは話か読かないので、 うことにしてさきに進みます。 さっそく、定義にとりかかりましよう。 そう思うとい ~ 昜の設図 ( 図 1 ) をご覧ください。コントロール・ポイントは 3 つ です。各ポイントの座標を次のように定義します。 z4{1eft}.. zl .. z3 .. {1eft}z5.. cycle; draw z12{dir 135 } .. Z13 .. {dir 135 } Z14 ; drawdot z2 ; end ; endchar ; draw z6{dir 135 } .. z7 .. {dir 135 } z8 ; ( 0 , 2yuge) . ( 0 , yuge) . 上のポイント 真ん中のポイント 下のポイント あんまんフォントふたたび 6 この連載では、説明のためにあんまんフォントが何隻も 登場しています。しかし、このところ姿を見かけないので、 「なんだか淋しいなあ」 という声があちらこちらから聞こえてきます。えつ、「そ んな声、聞こえへんぞ」ですって ! ? すでに顔をのぞカせ ていることですし、 こは、ま、穏便に・ あんまんフォントのプログラムは、 1995 年 7 月号で紹 介しました。そんな古い号は持っていない、あるいはバッ クナンバーを本棚の奧から取り出すのはイ鮎力だという人の ために、再度、リストを載せておきましよう ( リスト 1 ) 。 このリストの 16 ~ 21 行目で湯気のコントロール・ポイ ントを定義し、 24 ~ 26 行目で湯気を描いています。この 部分は同しようなイ乍業の糸区しですから、マクロで書いた ほうがすっきりすると思いませんか ? 132 これらのコントロール・ポイントを使って、次のように パスを作ります。 (O,O)dir 135.. ( 0 , yuge). dir 135 ( 0 , 2yuge ) 最後に、この湯気を引数で指定したぶんだけシフトし、 draw 命令て錨画するようにマクロを定義します。 def drawyuge(expr 2 ) draw ( ( 0 , o){dir 135 } ・・ ( 0 , yuge) . {dir 135 } ( 0 , 2yuge)) shifted 2 enddef ・ このマクロを使って、あんまんフォントのプログラムを 書き換えてみました ( リスト 2 ) 。どうです、かっこよくな りました 0 グルーピンク 0 こで、グルーピングについて説明しておきましよう。 グルーピングのおもな目的は、プログラムで用いられてい る変数の値をはかの重川から、、守る " ことです。これだけ ではよく分からないので、例を用いて説明します。 UNIX MAGAZINE 1996.2