UNIX MAGAZINE 1995年5月号

キーフレーズ

UNIX 000 MAGAZINE ネットワーク Windows SPARC コマンド SPARCstation ファイル インターフェイス 1995 システム Ethernet HDD -3 対応 2.0 キーポード FAX MHz 場合 BSD/OS バケット アプリケーション TCP/IP アドレス Sun Windows NT CPU 機能 PPP クライアント TCP Tel -2 NetWare SNMP bps 文字列 sty コネクション UnixWare 利用 -1 SUN 登録商標 価格 プログラム 100 Subject Message サポート 出力 ソフトウェア time シリーズ 可能 接続 LAN Base sec ルータ 指定 データ PostScript ワークステーション skinhead OGB 2GB station NetNews 米国 設定 表示 NEWS FDDI オプション 必要 800 include X11 インストール int for SCSI ツール 日本 mail ゲートウェイ インターネット sheepcount 環境 Solaris indians lset ページ

目次

連載 78 ワークステーションのおと 坂下秀 続・その後の T3400 ています。 NetNews の記事によれば、ネジ山を潰して す。 HDD を取り付けているネジは、かなり固く締まっ 番に外していけは陬り出せます。ここでも注意が必で を見間違えることはないでしよう。コネクタやネジを順 5. これで、やっと筐体か院全に 2 つに分離します。 HDD ケープルを突かないように注意してください。 だし、ピンセットの先端はとがっていますから、基板や 壊してしまいます。ピンセットなどを使いましよう。た 入りません。年理に手を入れるとコネクタやケープルを あります ) 。筐体はそれはど大きく開かないので、手が ( 同しような HDD のコネクタを割ってしまった経験が を加えると、ソケットやコネクタカリれてしまいます 端を持ち上げると外れるようになっています。理にカ ルムケープルのコネクタがすこし特殊で、ソケットの両 4. フィルムケープルとフラットケープルを外します。フィ まうとあとで泣くことになります。 らも切れやすく、コネクタも弱いので、大胆に開けてし ケープルとフラットケープルで結はれています。どち に分かれたように見える筐体は、かなり短いフィルム 3. ツメが外れたからといって安じ、してはいけません。 2 つ られているので、できるかぎり丁寧に開けます。 けます。筐体は、いかにも割れそうなツメで組み合わせ ばなりません。止めてあるネジを外したあと、筐体を開 2. これまた当然ですが、入れ替えるためには分解しなけれ けられなくなる場合があります。 1. もちろん、このようなことをすると、保守サーピスカ授 るときの注意恥頁を書いておきます。 4 万円弱でした ) に交換することができました。入れ替え のもの ( の MK1824FCV という型番で、秋葉原では 私カイ吏っている T3400 の HDD を、無事に 340MB UNIX MAGAZINE 1995.5 しまった人もいるようなので、最後の一瞬まで由断して はいけません。 6. 細かな作業を続けてきたので疲れているとは思います こまでの苦労を水の泡にしないためにも、ろ早す るとき以 - 日こ注意しながら新しい HDD を組み込み、元 に戻します。 7. ネジ止めを忘れたり、金属を内部に置き忘れたりしない ようにします。組み終えて持ち上げてみたらカラカラと 音がした、などということがないようにしましよう。 この交換を含めて 2 回はど分解しましたが、ただでさ え身体力嵶い私はネ聨釜をすり減らして寝込んでしまいまし た 1 。ですから、このような細工に自信がある人にしか勧 められませんにんな面倒なこと、誰もせーへんて ? ) 。 とにかく、あちこちの英斤を乗りきって、なんとカ噺し い HDD を組み込みました。 次は、この HDD を BIOS に認識させます。これは簡 単で、 T3400 を再起動し、メモリチェックのメッセージ が出るあたりで ESC キーを押すだけです。すると、セッ トアッフ。画面か現れて HDD を認識します。画面の右上 にある HDD の容量表小が 340MB になっているのを確 認します。 あとは、 DOS や Windows を順番にインストールして を彳こするだけです。 もう 1 つ注意です。・瓰匠、 NetNews の comp ・ sys. lap- top に次のような記事力寸殳稿されていました。 「 T3400 の初期のモデルでは、キーポード・コントロー ラ ( リピジョン 1.00 ) に不具合があり、キー入力を取りこ ほすことがある。これは、新しいコントローラ ( リピジョ ン 1.10 ) を載せたマザーポードに交換すれはる。コント ローラのリピジョンは、イ寸属している tdiags. exe コマン ド忍できる」 1 イ議なことにスキーに行ったらすっかり治ってしまいました 75

連載 / プログラマー入門ー 0 図 11 lorder の実行結果 % lorder sheepcount . 0 varl sheepcount . 0 sheepcount. 0 varl . 0 va て 1 . 0 var2.0 var2.0 sheepcount. 0 varl .0 sheepcount. 0 var2.0 るので、 lorder の出力には、 sheepcount. 0 sheepcount. 0 . 0 var2 . 0 という行かま t ます。また、 sheepcount. 。で参照してい る変数 vl と v2 はそれぞれ varl. 。と var2. 。で定義され ているので、 sheepcount . 0 varl. 0 sheepcount. 0 var2.0 となります。 lorder のおかげで畩存関係が分かるようになりました。 でも、まだまだ人間がこ窈青報からオプジェクト・ファイ ルの順番を決定するのは辛そうです。そこで今度は tsort コマンドの出番です。 tsort は lorder が出力する情報を もとに、オプジェクト・ファイルの順番を決めるコマンド です。 lorder オプジェクト・ファイルの列ー tsort のようになるので、 var2.0 varl . 0 sheepcount . 0 % lorder sheepcount . 0 varl . 0 var2.0 ー tsort varl. 0 、 var2.0 なら、 してくれます。たとえば、さきはどの とすると、アーカイプ・ライプラリに適した順番を示 sheepcount. 0 、 74 になっているのであっという間に礙します。 8 こ刎第一贓の実行をいてはいけません。互いを呼しける無艮ループ ago. c と niwatori. c は互いを参照しあっているので 8 場合があります。たとえば、リスト 10 ~ 11 に示した tam - ところで、 lorder と tsort を使っても順番を決めかねる ライプラリカイ乍れます。 のコマンドを実行すると一発で正しい順番のアーカイプ・ var2.0 ー tsort % ar q libright . a 'lorder sheepcount. 0 varl . 0 \ リスト 10 tamago. c の内容 tamago—ga—saki ( ) niwatori—ga—saki ( ) ; リスト 11 niwatori. c の内容 nivatori—ga—saki() tamago-ga-saki ( ) ; れらのオプジェクトに対して lorder を実行すると、 tamago ・ 0 tamago ・ 0 % lorder nlwatori. 0 tamago. 0 niwatori . 0 nxwatori .0 niwatori .0 tamago ・ 0 ta.mago. 0 nivatori. 0 ク・リンクについてです ラリについてお話ししました。次回はいよいよダイナミッ 今回は、スタティック・リンクとアーカイプ・ライプ ください。 は、変数や関数をどのファイルで定義するかを再検討して 開発中のライプラリにこのメッセージか明れたときに niwatori .0 tamago ・ 0 tsort : tamago ・ 0 : niwatori .0 tsort : cycle in data % lorder tamago ・ 0 niwatori . 0 ー tsort されます。 に通すと、以下のような、、 cycle だよ " メッセージか表示 で、このようなオプジェクト・ファイルを lorder と tsort いるようなときには本質的に順番を付けられません。そこ 複数のオプジェクト・ファイルの依存関係か禰環して となり、お互いに依存している結果になります。 UNIX MAGAZINE 1995.5 ( あらい・みちこ ASTEC)

連載 / プログラマー入門ー 0 図 10 sheep. 0 をリンクしたときのエラーメッセージ % cc ー 0 sheep sheep. 0 —L. —lcount 1d : . /libvrong. a : warning : archive has no table Of contents ; add one using て a Ⅱ 11b ( 1 ) ld : Undefined symbol _vl リスト 9 sheep. c の内容 main() printf ( ”羊が % d 匹 \ Ⅱ” , sheepcount ( ) ) ; すが、今回はエラーを出させるためにわざと ranlib を実 行しないでおきます。 次に、このライプラリを sheepcount() を呼び出すプロ グラム、 sheep. c ( リスト 9 ) とリンクさせます。すると、 なにやら賑やかにメッセージを表示しました ( 図 10 ) 。 1 行目のワーニングは ranlib を実行しなかったせいですか、 続いて、、シンポルが定義されていません " 工ラーも出てし まいました。 原因は、リンカが未定義のシンポルを探すメカニズムに あります。このリンカは未定義のシンポルをアーカイプ・ ライプラリの : 頁のファイルから順番にギ臻します。そし て、未定義のシンポルを定義しているファイルがみつかる と、そのファイルを結合します。しかし結合したファイル カ噺たな未定義のシンポルを含んでいると、まだ鮹夬でき ていない未定義のシンポルとあわせて、結合したファイル の次のファイルからまた順番に探します。 上の sheep. c 刎列で具イ勺な処理を追ってみましよう。 1. sheep. c のなかで参 . 照している sheepcount() 関数の 定義をライプラリから探す。 2. varl. 0 には sheepcout() の定義がみつからない。 3. sheepcount. 0 に関数 sheepcount() の定義がみつか る。 4. sheepcount. 0 を結合する。 5. sheepcount ・。に未定義の変数 vl 、 v2 があるので、続 けて次のファイルを詩ヾる。 6. var2. 。を謌べると変数 v2 の定義がみつかる。 7. var2. 。を結合する。 8. こオ人 -. ヒライプラリにファイルがないので変数 vl カ味 定 ) ままになる。 UNIX MAGAZINE 1995.5 変数 vl はライプラリの最初のファイル varl. c で定義 されています。ライプラリが 1 度しかスキャンされない 場合には、未定義工ラーになってしまいます。つまり、 % cc ー 0 sheep sheep. 0 —L. —lcount —lcount のように同しライプラリを 2 回スキャンさせれば未定義工 ラーは出なくなります。しかし、これはあまりにも手際の 悪いやり方ですれ しつは SunOS の場合、ライプラリ本を 1 度だけしか スキャンしないので目次ファイルがなければ上記のような 工ラーになります。でも、目次ファイルがあるときにはラ イプラリをスキャンせすに、目次ファイルから未定義シン ポルが定義されているファイルを直孑架しだすのでエラー カ起こらなくなります。 リンカが未定義シンポルを探す処理はシステム依存で、 目次ファイルを作らないシステムでもエラーカ起こらない こともあります。しかし、そのような場合にもオプジェク ト・ファイルの依存関イ系に注意して 1 度だけスキャンす ればすむような順番にオプジェクト・ファイルを並べると 効率の怖止力硼待できます。 上刎列のように叫屯なケースならばっと見ただけでもオ プジェクト・ファイルの依存関イ系が分かりますが、依存関 係がもっと複雑な場合には人手で処理するなんてとんでも ありません。そこで登場するのが人間に代わって依存関イ系 を考えてくれる専用ツールです。これを雇えば人間カ顴わ されることはなくなります。 lorder はオプジェクト・ファイルの依存関イ系を調べる コマンドです。引数としてオプジェクト・ファイル名を与 えると、ファイルどうしの依存関係を出力してくれます。 図 11 は、引数に sheepcount. 。、 varl. 0 、 var2.0 を指定 した例です。 1 行にファイル名が 2 個すっ並んでいます が、 1 番目がシンポルかれたファイル名、 2 番目がシン ポルか完義されているファイル名を示します。 関数 sheepcount() は sheepcount. 0 で定義されてい 73