-2 - みる会図書館


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

1. UNIX MAGAZINE 1993年8月号

LJN Ⅸへの招待 標準工ラー出力と標準出力の両方に同じファイル err が とすれは、標準ェラー出力をファイルに変更できます。例 使用されることになります。次の例でその様子を見てみま を見てみましよう。 しよう。 $ ls f00 f00 not found $ ls f00 2>err $ cat err f00 not found Bourne シェルでは、このようにして標準工ラー出力 を端末からファイルに変更できます。 C シェルではサプシェルを用いて、 ( command > filel ) > & file2 $ ls f00 bar bar not found f00 $ ls f00 bar 2>err > & 2 $ cat err bar not f ound f00 ls からの出力のうち、標準出力と標準ェラー出力の両 方が err に書き込まれています。 > & 数字では、標準出力 ( ファイル言当子 1 ) か数字で 指定したファイル記述子に割り当てられるファイルに出 としないかぎり標準出力と標準ェラー出力を別々にでき 力されますが、これは、 ません。しかし Bourne シェルでは、 数字 1 > & 数字 2 command > filel 2 > 万 le2 としても使えます。すると、数字 1 で指定したファイル 己述子への出力が、数字 2 で指定したファイル記述子の とすれは可能です。ところで、 Bourne シェルの出力リ ファイルに出力されます ( つまり、数字 1 の省略値がファ ダイレクションでは、 イル言当子 1 となるわけです ) 。さきほどの例は、これを 利用すると、 コマンド > & 数字 という使い方もできます。このガ去では、標準出力がファ イル記述子数字に割り当てられたファイルに出力されま す。次のコマンド行を考えてみましよう。 一三ロ $ ls f00 bar >err 2 > & 1 と実行できます。 C シェルでは、 $ ls 2>err > & 2 コマンド > & ファイル Bourne シェルでは、入出力リダイレクションのメタ を使い、標準出力と標準工ラー出力の双方をファイルに変 キャラクタをコマンド行の左から右へ順に処理していき 更できます。 Bourne シェルでは、これ ( > & ) と同し働き ます。したがって、最初に、 をするメタキャラクタは提供されていません。同じ操作を おこないたければ、数字 1 > & 数字 2 の機能を利用します。 2>err 以 - ヒ、 Bourne シェルにおける入出力リダイレクショ ンについて説明しました。次ページの表 1 に関連するメタ によって標準ェラー出力 ( ファイル言当子 2 ) に カゞ キャラクタとその働きをまとめたので、忘れてしまった 割り当てられます。次に、 場合は参考にしてください。 > & 2 て驃準出力 ( ファイル記述子 1 ) にファイル言当子 2 の ファイル、すなわち err カリり当てられます。つまり、 169 UNIX MAGAZINE 1993.8

2. UNIX MAGAZINE 1993年8月号

CD - 日 OM は素敵 ( 6 ) 表 4 CD-ROMXA のディレクトリ・レコードの ー " て始 図 5 の下部にあるサプウインドウで設定します。 システム用工リア まる行は各種の情幸財旨示とみなさそれ以外はソ ースフ システム用工リア ァイルの指定と解釈されます。 CD-ROM に変換出力され バイト 長さ 項目 2 Owner s group ID る UNIX ファイルのことを、ソースファイルと呼びます。 0 2 Owner 2 ソースファイル名は標準では mkcd を起動したディレク 2 Attributes 4 トリからの相対パスになりますが、、、 / " から始まる糸寸パ 、 XA" 0X5841 6 2 File Number ス名を指定したはうが思わぬ間違いがないので、説明書で 8 1 ( リザープ ) 9 5 は糸寸パス名を指定するように勧めています。 Att ributes 情報 ・情幸財旨示の一覧表を表 3 に示します。ソースファイルは、 説明 ( 、 1 " の場合の未 ) ビット ファイルの指定 " で記述しだ側で mode-l 、 mod ← 2 、 Owner 言ムみ可能 0 CD ー DA ごとにまとめらそのモードごとにセクタアド ( リサープ ) 1 レスの昇順に酉改」されます。 Owner 実行可能 2 ( リザープ ) 3 ソースファイルがディレクトリであった場合は、 CD- Group 言ムみ可能 4 ROM の現在処理中のディレクトリの下に指示されたディ ( リサープ ) 5 Group 実行可能 レクトリを生成し、そのディレクトリに含まれる全ファイ 6 ( リザープ ) 7 ルを、 CD-ROM 上に生成したディレクトリの下に置き World 言囚み可能 8 ます。サプディレクトリがあれば、同し規則で繰り返しま ( リザープ ) 9 10 World 実行可能 す。ソースファイルがファイルのときは、指定された順序 mode-2 form-l で言求 11 て配置されるので、関連生の強いファイルどうしを近接す mode-2 form-2 で日求 12 るセクタに配置することができ、アクセス速度に関してあ インターリープを使用 13 CD-DA データのファイル 14 る程度の考慮をすることかできます。 15 ディレクトリ サプへッダ付き mode-2 データの扱い 表 5 サプへッダ付きデータの言属性諚 CD-ROM XA 、 CD-I では、サプへッダ付きの mode- Attributes 2 セクタを利用することかできます。第 1 回の図 4 ( 1992 指定ガ去 年 12 月号 26 ページ ) のように、 form-l 、 form-2 の 2 種 —mode s . 1 s . 2 —mode 類のデータレイアウトが定義されています。これらのセク s . 12 タはインターリープすることカきます。 form-l 、 form- s . li —mode 2 、インターリープなどの情報はサプへッダに言求される s . 2i —mode —mode s .12i とともに、該当するファイルを定義しているディレクト —mode リ・レコードにもセットします。 CD-ROM XA ではディレクトリ・レコードが ISO サプへッダをもつ mode-2 form-2 でインターリープなし 9660 から拡張されています。第 4 回の表 2 ( 1993 年 4 の ADPCM ファイルを指定するには、、 -mode s. 2 " と記 月号 39 ページ ) にある IS09660 のディレクトリ・レコ 述します。 ードの最後の項目であるシステム用工リア (System Use リアルタイム・ファイルの扱い lnformation) と、このなかの Attributes' 項目のピッ トの未カ俵 4 のように定義されています。 Attributes の 図 1 にあるように、 CD-ROMXA や CD-I などで用い られるインターリープされたファイルを扱うために、 Disc 11 、 12 、 13 ピットは、第 1 回の図 9 ( 1992 年 12 月号 33 ページ ) のサプへッダ情報と矛盾がないように設定しなけ Scene と呼ばれるソフトウェアが用意されています。これ れはなりません。このため、 mkcd では "-mode s " 指定 は ADPCM の音声を複数チャネルで司時再生したり、画 カ俵 5 のように修飾できるようになっています。たとえば、 像と同期再生する場合に使用します。 UNIX MAGAZINE 1993.8 0 ビット 11 ピット 13 ビット 12 form-l form-2 interleaved 〇 〇 〇 〇 〇 〇 〇 〇 一一〇〇〇 105

3. UNIX MAGAZINE 1993年8月号

◆〃 SOlaris への OW- 田 4 OW- Ⅱ 4 SL- 2 SA ー 280 SA-2 田 SA ー 289 教育サービスのごあんない 旅立ちをサポートします 日本サン・マイクロシステムズ株式会社の教育コースは、 米国 Sun Microsystems, lnc. で開発されたコーステキストを べースに、日本のユーザ向けに内容を組み替えた、独自の カリキュラムにそって学習を進めます。 弊社教育コースでは、 SPARCs ね tion を用いた豊富な実習を 通じて、実践的な知識をイできます。 また、自習用教材や、お客様だけの特別コースの設定、 Sun の教育プログラムをお客様が開設できるライセンストレー ニンク喫約など、標準コース以外のメニューも設けています。 新たに SoI is2. x 対応のエンドユーザ、プログラマー、シス テム管理者向けのコースフローも開催し、みなさまのお越 しをお待ちしています。 特別割引コースパック実施中 6 月 28 日から 9 月 30 日まで、 solaris 2. x および SunOS 4. x それぞれのコースフローに低料金のコースパックを設定します。 この機会にお得なコースパックをご利用ください。また、エンドユーザパック受講者 ( 先着 28 名 ) には、、 OpenWindows 操作 日本語 Solaris 2. x 対応コースパック コースパックの一例 ビデオ′′をプレゼントします。 工ンドユーザバック \ に 0 , 000.- プログラマバック \ 四 6 , 000.- システム管理バック \ 23L000.- お問い合わせ 詳しい資料を希望される方は、資料請求カードをご利用ください。 教育コースカタログを送付いたします。 ・ OpenWindows オペレーション I ・ OpenWindows オペレーションⅡ ・プログラマのための基礎 ・ ANSI C プログラミング I ・ ANSI C プログラミングⅡ ・ Solaris2. x システム管理 basic ・ S 引 aris2. x システム管理 I ・ Solaris2. x インスト 3 日問 2 日問 3 日間 2 日問 3 日間 2 日問 日本サンマイクロシステムス株式会社 A Sun Mlcrosystems Computer Corporation BuSIness KSP トレーニンク発ンター TEL044 ー 819 ー 3181 川崎市高津区坂戸 3 ー 2 ー 1 KSP 西棟 413 号 FAX044 ー 819 ー 3180 Sun Microsystems, Sun Microsystems 社のロゴ・マークは、米国における米国 Sun Microsystems, lnc. の登録商標てす。 OpenWindows は日本サン・マイクロシステムズ株式会社の商標てす。 SPARC は、米国 SPARC lnternational, lnc. の商標てす。 SPARC 商標のついた製品は、米国 Sun Microsystems 社が開発したアーキテクチャに基づくものてす。 Solaris は米国 Sun M icrosystems, lnc. の登録商標てす。

4. UNIX MAGAZINE 1993年8月号

sub bd { local ( $ ー ) shift ; 使って、文字列のうちの一部分を重ね打ちしたり、下線を nroff の出力では、バックスペースやアンダーラインを は " abc " という文字列に下線を引くことを表し、 AHa_AHb_AHc 引いたりする。たとえば、 線を引くには、 ように単純にはいかない。多くの場合、日本語文字列に下 しかし、日本語の 2 バイトコードが入ってくると、この てのワード ( / \ w + / ) に下線を引いている。 る。 ( 1 ) は、そのためのプログラムである。この例ではすべ このようにアンダーラインや重ね打ちを使いたいことがあ 普通のプログラムでも、出力の一部を強調するときに、 UNIX の世界ではいまでもひろく使われている。 で、ページプリンタの時代では意味をもたないのだが、 ことを意味する。これはタイプライタの時代にできた習慣 で、” abc " のそれぞれを 2 回ずっタイプして重ね打ちする ー H H 漢ーー H H 字 のように、アンダーラインを 2 回出力したあと、バックス ペースで 2 カラム戻ってから文字を出力する。 ( 2 ) はこれを おこなうプログラムである。 / [ \ 200 ー \ 377 ] ? . / というバターンは、 2 バイトコードあるいは 1 バイトコー ドの各 1 文字にマッチする。したがって、マッチした文字 列が 2 バイトならば、その前に ~ \ cH \ cH " という文字列 を加えればよい。 1 バイトならば " ー \ cH " という文字列を加 える。 ( 3 ) の例は下線ではなく重ね打ちする場合であるが、処理 の内容はほとんど同しである。 テキストに対してこのような加工をしても、端末に表示 しただけではその効果は見えないが、プリンタに出力した り、ページャ・プログラム ( less や more など ) を使って画 面に表示させると、その部分が強調されて表示される。 おわりに 2 回にわたって、 PerI による日本語データ処理について 解説した。やはり、力すくという感しは否めないが、けっ こうなんとかなるということだけは分かっていただけたと アスキーの日本語 UNIX が発表されると同時に使い始 めて、いままで何種類もの日本語 UNIX を使ってきた。 それまで社内で UNIX を推進してきた人たちのあいだで は、べつに日本語なんか必要ないよ、という意見も多かっ たし、筆者もわりとそのように感していた。しかし、いざ 日本語の使える UNIX を使い始めてみると、ふだん話し ている言葉を自在にコンピュータで処理できるのはしっ に快適である。日本語が使えるようになると、それまで皆 無だった troff ユーザーが急に増えだしたし、メールの量 164 も圧倒的に多くなった。 JUNET で日本語のニュースが送 られるようになってからは、目にするデータも日本語のは うが多いような気がする。 こうしてみるとやはり、 UNIX のツールは日本語を処理 できるということが、いまや必須なのだろう。それどころ か日本語だけでは不十分で、多国語をサポートしなければ ならない時代になってきた。すこしましめに国際化という ものを考えてみようか。 ( うたしろ・かすまさ SRA) UNIX MAGAZINE 1993.8

5. UNIX MAGAZINE 1993年8月号

UN Ⅸへの招待⑩ 表 1 Bourne シェルの入出力リダイレクション メタギャラクタとその使用例機能 く file く川 e く & 数字 >file > 川 e > & 数字 1 > & 2 標準入力を file に ファイル記子数字を file に ( 入力 ) 標準入力をファイル記述子のファイルに 標準出力を file に ファイル子を川 e に ( 出力 ) 標準出力をファイル記述子数字のファイルに ファイル言子 1 をファイル言当子数字 2 のファイルに 工ラーメッセージの出力 とすれば、標準出力への出力がファイル記述子 2 、すなわ echo 引数 1 > & 2 あるいは、 echo 引数 > & 2 バックします。これを、 のが一勺です。 echo は、標準出力にその引数をエコー 出すことカ呵能です。その場合、コマンドは echo を使う ンの機能を使えば、標準工ラー出力にエラーメッセージを 一方 Bourne シェルでは、前述の出力リダイレクショ ラーメッセージは標準出力に出力するほかありません。 出す機能は提供されていないので、プログラム中からの工 ところが、 C シェルでは標準ェラー出力にメッセージを ムでのエラーメッセージも標準工ラー出力に出力します。 力するのが一勺です。これにならい、シェル・プログラ 果を、標準工ラー出力 ( あれにエラーメッセージを出 ついて説明しましよう。 UNIX では、標準出力に実行結 た。その続きとして、今度はエラーメッセージの出力に プログラムからの、メッセージ出力について解説しまし 前回は、 echo や cat と組込みデータを使ったシェル・ ムとしてはなんの未もないものですか ) ェラーメッセー ッセージか驃準工ラー出力に出せるわけです。 ち標準ェラー出力に出力されます。このガ去で、エラーメ ( プログラ ジを出力する例を見てみましよう。 % cat err—prog # ! /bin/sh echo ' はじまりはじまり ) if test $ # —eq 0 then ech0 Usage : $ 0 170 filename > & 2 exit echo ' おしまいだす , % err—prog はじまりはじまり Usage : err—prog filename % err—prog myfile はじまりはじまり おしまいだす このプログラムでは、最初に、 echo コマンドで標準 出力へメッセージ、、はじまりはじまり " を出力します。次 に、もし (if) このプログラム実行時の引数の数 ( $ # ) が 0 に等し (-eq) ければ (then) 、 echo でエラーメッセージ を出力し、 exit コマンドを実行します ( シェル・プログ ラムカ鮗了します ) 。引数の数が 0 のときは、以の 2 つ のコマンドを実行してプログラムは終了しますが、引数の 数が 0 でない場合は、最終行の echo を実行しプログラ ムか終了します。 さて、 if ~ fi のあいだで使用した ech 。コマンドは、 > & 2 を利用し標準出力への出力をファイル言当子 2 、すなわち 標準ェラー出力に変更しています。 echo は、標準出力に 引数をエコーバックします。その出力をファイル記述子 2 にリダイレクトしておけば、メッセージがエラー出力に 出力されるわけです。 % err—prog > stdout Usage : err—prog filename % cat stdout はじまりはじまり % err—prog myfile > stdout % cat stdout はじまりはじまりい一 おしまいだす % err—prog 2>stderr はじまりはじまりい一 % cat stderr Usage : err—prog filename UNIX MAGAZINE 1993.8

6. UNIX MAGAZINE 1993年8月号

特集ドン一ときたら困るけど、ネットワーク卸里・・ という 2 つの選択肢があります。 monkey 君の会社では、 2 番目のガ去を採用しています。この場合、・ルータの役目 を担わせつつ、通常のワークステーションとしても利用で きる 5 という利点があります。 さて、いままで普通に使っていたワークステーション をルータにするためにはどうすればいいのでしようか。ル ータは複数のネットワークに対する架け橋になるのですか ら、当然それぞれのネットワークに対応する、、ロ " をもた なければなりません。この場合ならば、 saruyama-net 側 のロと monkey-net 側のロの 2 つが必要になります。 ー殳に、ワークステーションを購入した点では、ネッ トワークのロ (Ethernet インターフェイス ) は 1 つしか 装備されていません。そこで、ルータにするワークステー ションには、新たに Ethernet インターフェイスをもう 1 つ追加する必要があります。追加したインターフェイスの ことを、セカンド Ethernet と呼ぶこともあります。追 加手順そのものは、次のようにごく簡単です。 1. Ethernet インターフェイス・ポードを購入する 本体を購入した会社から取り寄せるのが、確実で安全な ガ去でしよう。あるいは、東京・秋葉原、大阪・日本 橋などの専門店でも入手できます。接続ガ去 ( 10B e 5 用のものか ? ) も石忍しておきましよう。 2. 本体の、、がわ ~ を外す 機種によってガ去は違いますが、簡単に外れます。 3. ポードを挿す 拡張カード用のスロットが用意されているので、壊さな いようにポードを慎重に装着します。取扱い説明書を読 めは、誰でもできるはすです。ただし、静電気にひどく 脆いので、できるだけポード本体の酉当泉などには触れな いようにしましよう。 4. 本体の、、がわ " を元に戻す ルータのハードウェア的な設定は、これでおしまいで す。あとは、さきほど同軸ケープルに取り付けたトランシ ーバと、ルータ ( ワークステーション ) の Ethernet イン ターフェイスを、トランシーパ・ケープルで接続します。 このとき、次の点に注意してください。 5 とはいえ、きわめて重要な彳難リを担うことになるので、使うときにプレッ UNIX MAGAZINE 1993.8 シャーはかかります。 ・トランシーパに無理な力はかかっていないか ? 35 のワークステーションカ続できます。ただし、カスケー に噛みついているトランシーバに対して、最大 64 台まで の、、カスケード " 接続が可能なので、 1 本の同軸ケープル まて接続できるのです。さらに、図 7 のように 2 段まで をケープルに取り付ければ、ワークステーションを 8 台 ものです。つまり、 1 台の ( マルチボート ) トランシーバ 接続し、トランシーパ・ケープルを 4 ~ 8 本つなぐような ポート・トランシーパとは、同軸ケープルとは 1 カ所で そこで、 2 のガ去を用いることが多くなります。マルチ りお勧めできるガ去ではありません。 要です。トランシーバの取付け位置にも制限があり、あま シーバを Ethernet の同軸ケープルに取り付ける作業が必 1 のカ 1 去では、ワークステーションの台数ぶんのトラン 2. マルチボート・トランシーバを使う。 1. ワークステーション 1 台につき、トランシーノヾを 1 つ て、次の 2 つがあります。 きと同しです。代表的な接続ガ去 ( 10Base 5 の場合 ) とし のワークステーションを既存のネットワークに接続すると ルータで 2 つのネットワークをつなげば、あとは普通 シーバを 1 っすっ付けるのは面倒ゃな」 て、次はルータ以外もつなげなあかんわけやけど、トラン のとは独立になったわけや。自分の城ちゅうとこやな。さ 「よし、これで我カワ。ロジェクトのネットワークが会社 マルチボート・トランシーパの取付け のユーザーの文撃を受けてしまいます : ー ) ようではネットワークを安じ、して使えなくなり、ほか 固定されていることを確認しましよう。簡単に外れる イドロック " などがあります。いずれにせよ、しつかり Ethernet のロの固定力去には、、、ねし止め " や、、スラ ・トランシーパ・ケープルのロは固定されているか ? かに固定したはうがいいでしよう。 も力がかかる場合には、トランシーパ・ケープルをどこ 体にかかり、トランシーバを壊しかねません。どうして トランシーパ・ケープルの重みがもろにトランシーバ本 Ethernet の同軸ケープルを空中配線 ( ? ) していると、

7. UNIX MAGAZINE 1993年8月号

図 1 item コマンドー例 srekcahX ja-gon J 、 gm > 1t8 ⅸ 1 + 以 2 : 以 brain dæage 3 : 以 corsp 止 4 : 以 ueanie 5 : ⅸ土新 6 : ー」以 7 : Life リ i 物 LNIX を > 2 連載 / Li Language Jargon> ー 体から指定された文字列を検索します。図 2 の例は item grep コマンドは item と違って、 jargon ファイル : 全 grep コマンド 後の部分は欠けています。 指定してそれを表示させています。ちょっと長いので、最 という項目の説明を見るために、次に 2 という番号を 2 : UNIX brain damage 7 つの項目がリストされています。この例では、 unix" という文字列を検索している例です。みつかった 列を大文字、小文字を区別しないて験索します。図 1 は、 item コマンドは、項目名のなかから、指定した文字 item コマンド サプコマンドの使用例 its 加 - J 欲 md ロ - c 叩 atior 虐 . , this in t げれ illunimtes n 材 よ s hacker&n is ith 」 alify as a first—class s 『 ce f ・ tl-ese thirgs. much 物日日 ya 」 to 部 0 h of 皿 ' history, 価 1k1 旧 and h to 地 ht リ e12 smts, ard imalu 曲 le. AI を tYE リ 廿旧 t tutor ・ ials a-d tæ} ・ nical um't. T トを 281t is go 1 , れ , T ト旧」仕 ors of this ー set 代 to 11 」 a11 仕を物 i 「を s ー」 t 0 ー 13 ー 53 57 ー 7 Prent ice—Hall 1 19 LiE*S 師 Smdg : Li 他 uith a 師 i ヂ Ev 部・喝 : ja-•gon> 244 244 : Life with 243 : Hækers 242 : keünesses of t ト旧 Hacker Personalitg 241 : TYE 厄引 li of k ' 240 : / ・ / 811 2 : ZTk 2 : zcnbie 図 2 grep コマンドの 1 単語での検索 to 廿旧 lnter ・ net r 1 止旧 , which is a carriage retu•n ræognize bare 11r を feed ( t ト旧 LNIX 「旧Ⅱ r 旧 ) an e 」 ival 日 "t form ple of 以 &ain damage is a {kluge) in a mail server to c ト・名 e a11 t ト旧『 ds Of tha 」 sands LNIX out せ日を . cyznge their s to match non ー 91f8 ir 裕 vior 仕一 it is to 」 it much easia- ・ fa- ・ 0 廿・朝 inot 、 1t9 ) systems to ard t ト旧謝以 , 0 ram in stion ー dæs not. ー謝以 &ain e CLNIX brain dmage' if t ト旧 program conforms to pLblished standards it 111 inter••qE•ate with UNIX systems. T ト旧 hack qualifg 「旧加 *. progræ ( t 止 al 地 a mailer) a 「嘛にし NIX systæ so that : 以 brain damage: n. Something 仕 t ト s to 衵 to . a 86 と同様に、 j argon> grep unix のようにして、、、 unix" という文字列を検索した結果で す。リストの最後の部分しか表示されていませんが、なん 図 3 grep コマンドの 2 単語での検索 騨お lify a first-class sa ℃ e for t 物 1 s. 亂けー of hæk&'dom is i 0 記 with 以 , this in tl-rn Ⅱ 1 止 t 日 s 第 Of its in—Jokes and g••ecccupatims. ja - を 1 〉 g 「印 regular ・ exmession Særching ” r ul e , essi ロ 1 ” ... ・旧 Ja•gm 〉 2 計 g /reg'eksp/ 明以 ] n. (alt. ( r ' ー 1. Co ” written a-d spok 日 1 、 e•e ・ iatim for ・ , one 計 t ト旧 wil 謝 patterns used, e 嚊 . , LNIX utilities such cgrep(l) ' , ( 1 ) ' , md ー k ( 1 ) 日 conventions slmilar to b 」 t 宿 or も elaborate than tmse descr ・げ地「・ { gl 曲 } . For pur•gnses of this 1 i91 , it is sufficient to note 仕øt also a118 chmacter ・ sets 止 , 廿 us , ロ衵 can sgpcifg 、富喝 rm-alphatEtic &øracter with ー CAA-Za-z] ' 2. Name of a uell—krun PD regexp—har ・ pækage in t le C, uritten 地 L ト「 t 部・ 部℃印く her 「・ 9 飯 8. torcnt 。 . 記」 > . と 244 個の項目がみつかりました。 番目の、 244 : Life with UNIX こでは最後の 244 という項目を表示させています。 grep コマンドは大文字、 小文字を区別しないで検索し、マッチした文字列を反転さ せて表示します。項目名の文字列も反転させるので、 244 番の項目名に反転表小が入っています。図 2 では、この項 目だけしか反転表示されていないので、はかのものについ ては説明のはうに、 un ⅸ " という文字列があったことにな ります。 かなり長い説明もあり、どの部分でキーワードがみつ かったのか捜すのが大変なこともあるので、反転表示は とても役に立ちます。 図 3 は、 regular expression ' という 2 つの単語から 構成される文字列を grep しています。この場合、 1 : grep 2 : regexp という 2 つの項目がみつかり、 2 番目の regexp の内容を 表示しています。図から分かるように、 2 つの単語が別々 の行に分かれていてもちゃんと検索してくれます。 -w オプション item と grep コマンドでは、 -w というオプションが 使えます。これは UNIX の grep と同しように、指定し UNIX MAGAZINE 1993.8

8. UNIX MAGAZINE 1993年8月号

連載 / コアダンプするんですけどー① リスト 2 static な配列を返す関数列 char *testfunction2(int selection) static char table [ 16 ] ; switch (selection) { / * This must be static * / case 0 : strcpy(table , break; case 1 : strcpy(table , break; default : strcpy(table, break; return table ; ” f00 " ) ; は関数の内部に文字列を用意しなければなりません。これ についても、次のような 3 通りのインプリメントが考えら れます。 1. malloc() などでメモリエリアを確保する 2. static な配列を用意する 3. 関数の呼出し元が責任をもってエリアを用意する 1 の場合は、 ・関数を繰り返し呼び出しても、以前の結果は壊れない ・ free() を忘れると大変だ というような特徴があります。引数の値に応して文字列を 返す変換関数を作ると、リスト 1 のようになります。 2 の場合には、反対につねに同しェリアを使用するため、 ・関数を呼び出すたびに前回の結果を破壊する ・ static なエリアなので、 free() する必要がない ということになります。さきはどのリスト 1 を static な配 列を返す関数に書き換えた例をリスト 2 に示します。この 例のとおりメモリの消費量がはっきりしていて、 free() す る義務もないので、ちょっとした変換関数などには手軽に 使うことができます。 3 は、 UNIX のライプラリ関数などでよく使われてい るやり方です。この場合は、関数のなかでエリアの大きさ をチェックするのか難しいので、エリアの大きさは別の引 数で渡す必要があります。また呼出し元でも、メモリエリ アを確保するためのコードが必要になりますので、前の 2 っとは基本的にプログラムの雰囲気が変わってきます。 138 リスト 3 strcpy() ライクな関数」 char *testfunction3(char *s, int selection) switch (selection) { case 0 : f00 ) ・ strcpy (s , break ; case 1 : strcpy(), "bar") ; break ; default : return NULL ; 自分で関数を作っていると、 UNIX のライプラリ関数 の仕様を真似したくなりませんか ? 一般的な呼出し形式 に従っておくとみんなカ硬ってくれそうとか、なんとなく かっこいいなあとか、筆者は思います。で、文字列を返す ライプラリ関数といえば、 strXXX() や index() などが 有名ですので、この辺を参考にしてみましよう。 ライプラリ関数の仕様を念頭においてリスト 1 を書き換 えてみたのがリスト 3 です。工ラーのとき ( 引数が 0 / 1 以 外 ) には NULL を返すようにしたところがリスト 1 と異 なっています。 リスト 3 の場合、関数の内部はかなりシンプルにまとめ ることができます。けれども、文字列がコピーされる領域 については関数の内部ではなんの保証もしていません。 れは、すべて呼出し側て責任をとらなければならないとい うことです。つまり、リスト 2 のときには、おせつかいに も関数側でメモリを用意してくれましたが、リスト 3 では、 どのくらいメモリか消費されるかは自分で見当をつけなけ return S ; UNIX MAGAZINE 1993.8

9. UNIX MAGAZINE 1993年8月号

ISDN 新発売 SPARC STATION SBus ISDN WAN カード BM—1S64 マスターカードー枚で 2 ヶ所と同時接続できます。 * スレープカード増設で 24 ヶ所同時接続可能。 B チャネルを複数使用して 1281 朝 ps , 192 2561 ps の高速伝送が可能です。 P / IP 環境下で使用できますので IAN 間接続や遠隔地からのデータベースアクセスが 即座に実行できます。 複数のリンクプロトコルを搭載していますので、 CISCO ルータやソニ—NEWS にもダ イレクトに接続できます。 バケット交換ゲートウェイドライバ開発予定 BM-lS64 マスターカード BM-lS64 スレーブカード G4FAX モジュールドライバ 開発中 回線交換ゲートウェイドライバ SoIaris 2. XX 用 近日発売 0 当 接続使用例 Sun ロ S ネット 64 ロ ロ ロ ロ ロ ・ 2 回線 (4B) で 4 ホスト (LAN) と同時接続 * 増設用スレーブカード使用 PC98 用 S ネット 64 81 Sun Sun Sun ロ BI ロ BI 日 2 ・ 1 ホスト (LAN) に対し 128Kbps 伝送 ロ B2 Sun ・ 2 ホスト ( LAN ) に対して同時接続 Sun Sun S ネット 64 ロ 192K 5 ロ S ネット 64 Sun Sun Sun ロ ロ Sun Sun ー。・ 2 回線 (4B) で 2 ホスト (LAN) と 192K s + 64K s 同時接続 * 増設用スレーブカード使用 Sun SBus シングル B チャネル LT—IS64 LT - 旧 64 カード 回線交換ゲートウェイドライバ バケット交換ゲートウェイドライバ 近日発売 * 記載の会社名、商品名は各社の商標又は登録商標です。 OEM カスタムボード開発承ります。 ・ DSP ポード・ 30 ポード・ SC ポード・旧 DN ポード・メモリポード・ A-D/D-A ポード・ CPU ポード ・各種専用ポード・各種ドライパ・ AS ℃開発・ SBus ISDN ネット 1500 対応通信ポード開発予定 ーラステムー式会 PC—IS64(98) 4 PC - 旧 64 ( 98 ) ポード TCP ソフト + N DIS ドライバ 資料請求 N 。 .84

10. UNIX MAGAZINE 1993年8月号

( 管理者でさえも ) どうすることもできないのです。 しかし、このファイルを用いることで惹き起こされ る欠点もあります。実際のソースファイルとは別のファ イルとして作成されているために、ソースファイルを編 集すると 2 つのファイル間で整合性がとれなくなる可 能性があります。この例としては、 6 月号で説明した exit 関数に関するものがあります。 exit 関数は、オン ライン・マニュアルや lint のライプラリ・ファイルでは v 。 id 型の関数として定義されていますが、ヘッダファ イルのなかでは int 型の関数として定義されています。 この矛盾が、ⅱ nt コマンドを使ううえで問題となったの です。 このような矛盾が生しるのは、仕方がないことでしょ う。この場合は、入出力の定義ファイルをもっているの で、これを編集して lint 用のライプラリを修正できま す。 exit 関数は、実際には戻ることのない関数なので、 統一さえとれていればその戻り値の型を気にする必要 はありません。そこで、 lint 用のライプラリのなかの exit 関数の戻り値を、 void 型から int 型に変更してみ ましよう。 /usr/lib/lint/llib-lc というファイル のなかの、 exit を定義しているところを void 型から int 型に変更します。そのあとで、このファイルに対し て lint コマンドを一 i オプション付きで起動すれはいい のです 1 。 lintl と Iint2 /usr/lib/lint ディレクトリには、これまで説明し たファイルのほかにも、 lintl と li Ⅱ t2 というファイ ルがあります。この 2 つのファイルは lint コマンドか ら呼び出されるもので、 lint コマンドのほとんどの処 理はこれらのファイルがおこなっています。 lintl は 第 1 ステージを、 1int2 は第 2 ステージを実行する ファイルです。 SunOS では、 lint コマンドの実体は /usr/lib/compile というファイノレで、このファイノレ が引数を処理しながら適宜 lintl や Iint2 を呼び出し ています。別の OS では、 lint コマンドがシェル・スク リプトで実現されているものもあります。 -i オプショ 1 通常はさきはど説明した / * LINTLIBRARY * / というコメントが入っ ているので、一 C オプション付きでなくてもかまいません。もちろん一 c オプションを使っても大丈夫です。コメントが入っていなければ、明 カ勺に一 c オプションを付けてください。 UNIX MAGAZINE 1993.8 LJN Ⅸ流プログラミング 34 ンを指定すると、 li Ⅱ tl の出力がそのままサフィックス を . ln に変えたファイルに格納され、 -c オプションを 指定すると、引数に指定したファイルすべての 1 洫 tl の処理結果がライプラリ・ファイルに格納されます。 もし使っているマシンの lint コマンドがシェル・ス クリプトで実現されているなら、ぜひ一度このファイル の内容を眺めてみてください。 lint コマンドがどういう 処理をしているか、 lintl や 1int2 がどのような入力 を受け取るかが分かります。あまりの単純さにびつく りすることでしよう。 lint のライプラリ・ファイルの 扱いは C コンバイラとはかなり異なるため、使いにく いと思った人がいるかもしれません。しかし、このファ イルの中身をよく読めは、 lint コマンドに対して一 L オ プションを有効にする方法も、きっとみつかると思い ます。残念なのは、 1 洫 tl や 1int2 の引数やオプショ ンに対する解説が、マニュアルのどこを捜しても見当た らないことです。もし解説があれば、より複雑な処理を する lint コマンドの作成もそれはど難しいことではな いでしよう。 今回は、 lint コマンドが用いるⅱ nt 用のライプラリ・ ファイルについて紹介しました。ライプラリ・ファイ ルで重要なことは、 ・ lint 用のライプラリ・ファイルは一 c オプションで作 成する システムで準備しているライプラリ・ファイルは一 1 オプションで使う ー C オプションを使って自分で作成したライプラリ・ ファイルは、一 1 オプションでは利用できないので直 接ファイル名を指定する の 3 つです。また今回は、 /usr/lib/lint ディレクト リに格納されているファイルについても紹介しました。 さて次回で、 lint コマンドの解説は終りにする予定で す。まだ説明していない lint 用のコメント、 Sun 以外 の lint コマンドなどをとりあげるつもりです。 ( いまいすみ・たかし東京工業大学 ) 153