306 ・ 5 章パワーツール ックの末尾にカーソルを移してから、次のコマンドを使います。 したいときは、カーソルをそのプロックの先頭に移してマークをセットし、そのプロ えておくことができます。たとえば、テキストのあるプロックに対して検索と置換を マークを利用することによって、テキストのある領域をカーソル位置を使用して覚 ーク a のある行の先頭に移動します。 ことができます。 ()a のように ) 普通のシングルクオートを付けると、カーソルはマ ( 頭にバッククオートを付ける ) を使えば、カーソルを直接マーク a の位置に動かす クは、 a から z または A から Z までの文字ならどれでもかまいません ) 。コマンド 'a に移動し、 ma とタイプすると、その位置に a というマークがセットされます ( マー でカーソル位置に与えられる 1 文字の名前です。カーソルをファイルの中のある位置 行を参照する「マーク」も使用することができます。マークは、ドキュメントの中 たい場合を除き、ほとんどは g フラグを使用します。 換のたびに確認を求める c があります。各行で最初に現れたパターンのみを置換し 利用できるア〃 gs としては、各行に現れたすべてのパターンを置換する g や、各置 ルの最終行を参照します。 x や y を空白にしておくと、カレント行が参照されます。 す。そのほかの特殊記号も、 x と y の代わりに使用することができます。 $ はファイ 行番号を指定する代わりに、全ファイルを参照する % 記号を使用することもできま : 1,10s/weebIe/wobble 5.1.11 テキストの移動、レジスタ こで、 'a はマーク a を含んでいる行を表し、 . はカレント行を表します。 : 'a, . s/weeble/wobble dd に続いて ( 同じカーソル位置で ). p をタイプすると、テキストが一度削除された から、 p を入力します。同じようにして、テキストをコピーすることもできます。 IO 行を削除するために ) コマンド 10dd を使用し、挿入したい場所にカーソルを移して ソルを含む行から 10 行を削除して、それをどこかにペーストしたいときは、 ( その 10 コマンドを使って ) それを削除し、 p コマンドで挿入することです。たとえば、カー 先に述べたように、テキストをコピーして移動する 1 つの方法は、 (d または dd
7.4 ファイル転送とリモート端末、ノフェア・ 6 引 ジが用意されています。それには、コマンド行から起動できる各ユーティリティ、お よび EIm が作成してメール管理で使用するファイルが記述されています。これらは 手軽で役に立つので、いつでも存分に使用すべきです。これらには、各コマンドに対 するコマンド行オプション、ほかでは入手できない技術的な詳細も記載されています。 いくつかのサイトでは、これらのファイルを印刷できる形式 ( PostScript 、テキスト、 そのほかのフォーマット ) で保存していますので、自分で手にとって見ることができ ます。 また EIm には、内部へルプも含まれています。これは、独立したファイルになっ ているので、プリントしておいて利用すると便利です。これらのファイルは以下のと おりです。 ・ elm-help. 0 lndex 画面から利用できる Actions ( 内部コマンド ) に対するヘルプ。 ・ elm-help. 1 Options ( ユーザカスタマイズ機能 ) メニューに対するヘルプ。 ・ elm-help. 2 Alias メニューに対するヘルプ。 ・ elm-help. 3 メッセージ表示画面から利用できる Actions に対するヘルプ。 7.4 ファイル転送とリモート端末ソフトウェア スタンドアローンの Linux システムを使用する際に解決しなければならない重要 な問題の 1 つは、ファイル転送とリモートファイル操作です。 こでは、 TCP/IP や UUCP の代わりに使用でき、便利に併用することもできる解決方法について解説し ます。 C-Kermit と Zmodem ユーティリティは、広範囲の非 UNIX ホストとの対話 を可能にし、シリアル通信を介して行えるファイル操作やさまざまな対話型操作モー ドによって、伝統的な IJN Ⅸ利用法を越える機能を持っています。
674 ・ 7 章ネットワークと通イ 7.4.2 Zmodem によるファイル転送 初期の簡単な Xmodem と Ymodem プロトコルから発展した Zmodem プロトコル は、強力で高速のデータ転送プロトコルです。これには、確実にエラーフリーのデー タ転送を行うために、 32 ビットのサイクリック冗長度チェック (CRC) が組み込ま れています。 UNIX プラットホーム上では、 RZSZ パッケージに Zmodem プロトコ ルをサポートした優秀なツール群が含まれています。 Xmodem や Ymodem といっ た関連プロトコルも、 RZSZ パッケージの一部分であるコマンド群によってサポート されています。 以下のコマンドは、現在の RZSZ パッケージで利用できます。 ・ rz Zmodem バッチプロトコルを使用してファイルを受信します。送信プログラムが 50 秒以内に Zmodem プロトコルファイルを送らないと、 rz は rb モードに切り換わり ます。 ・ rb Ymodem または Ymodem-g プロトコルを使用してファイルを受信します。 rb は rz コマンドの代わりに使われます。 ・ rx Xmodem プロトコルを使用してファイルを受信します。 ・ SZ Zmodem バッチプロトコルを使用してファイルを送信します。 ・ sb Ymodem または Ymodem-g プロトコルを使用してファイルを送信します。 sb は sz コマンドの代わりに使われます。 ・ SX Xmodem プロトコルを使用してファイルを送信します。 sz は人ってくる rz リクエストに応答して自動的にダウンロードを行い、 rz は入 ってくる Ymodem または Zmodem ファイルを自動的に処理します。 sz は、標準人 力を受信ホストに送るためのフィルタとしても使用することができます。 RZSZ ツー ルは、転送時間の推定、インクリメンタル方式のクラッシュ回復、ワイルドカードを
1.5 ソフトウェア機能・ 25 ために通信ソフトウェアを使用しています。職場や学校で UNIX システムに接続す るためにモデムを使用している人達もいます。モデムと Linux システムを使用すれ ば、ファクシミリを送受信することができます。 Linux の通信ソフトウェアは、 MS- DOS やそのほかの OS 上のそれと非常によく似ています。いままでに通信パッケー ジを使用したことのある人なら、 Linux にも馴染みのものがあることに気付くはずで す。 もっとも人気のある Linux 用の通信パッケージのひとつは Seyon で す。これは、 Kermit 、 Zmodem などといったさまざまな種類のファイル 7 章 転送プロトコルをサポートした、カスタマイズ可能な人間工学的インタフ ェースを持っ X アプリケーションです。そのほかの通信プログラムとしては、 C ー Ker - mit 、 pcomm 、 minicom があります。これらは、ほかの OS にある通信プログラム と似ていて、非常に使いやすくなっています。「 7.4 ファイル転送とリモート端末ソ フトウェア」で、 Kermit と ZModem についてはもっと詳しく解説します。 SLIP サーバ ( 前節を参照のこと ) にアクセスできないなら、シリアル回線を多重 化するために term を使用することができます。 term を使用できれば、リモートマ シンに接続したモデムを通して複数のログイン・セッションを開くことができます。 term を使用できれば、シリアル回線を通して、 X クライアントの接続をローカル X サーバに切り換えることもできます。それによって、リモート X アプリケーション をあなたの Linux システムに表示することができます。また、ソフトウェアパッケ ージ KA9Q も、 SLIP 風のインタフェースを使用しています。 電子掲示板 (BBS) を動かすことは、多くの人々にとってはまたとない趣味 ( そ して収入の手段 ) です。 Linux は広範囲の BBS ソフトウェアをサポートしています。 そのほとんどは、ほかの OS で利用できるものよりも強力です。電話回線、モデム、 Linux があれば、世界中のユーザに対してダイヤルイン・アクセスを提供することに より、あなたのシステムを BBS に変えることができます。 Linux 用の BBS ソフト ウェアには、 XBBS と UniBoard BBS パッケージがあります。 ほとんどの BBS ソフトウェアは、メニューベースのシステムの中にユーザを閉じ 込めます。そこでは、ある特定の機能とアプリケーションだけが利用できます。もう ひとつの BBS アクセス形態は、フル機能の UNIX アクセスです。それを利用すれば、 ューザがあなたのシステムにダイヤルして、正規ューザとしてログインできます。
502 ・ 6 章 Linux におけるプログラミング リタ言語です。アルゴリズムを反映した非常にきれいで論理的なインタフェースを備 えているので、主にコンピュータサイエンスの分野で使用されています (LISP は大 量のカッコ (parentheses) を使用しますが、それはコンピュータ科学者が常に好む ものです注 7 ) 。 LISP は関数型言語で、非常に汎用化されています。多くの操作は、線 形的な繰り返しではなく、再帰の概念を使用して定義されます。式は階層的で、デー タはリストによって表現されます。 いくつかの LISP インタブリタが Linux で利用できます。 Emacs は Elisp と呼ば れる固有の LISP 方言を含んでいますが、それ自体はかなり完結した処理系です。た とえば、 Emacs バッフアを通しての人出力など、 Elisp は Emacs と直接相互作用で きる多くの機能を持っています。しかし、 Elisp は Emacs に無関係のアプリケーシ ョンにも使用することができます。 また、カールスルーエ大学の Bruno HaibIe 氏とミュンヘン大学の Michael Stoll 氏が実装した Common LISP (CLISP) も利用できます。それには、インタブリタ、 コンパイラ、 CLOS (Common LISP Object System : オプジェクト指向の LISP) のサプセットが含まれています。 CLX ( X Window システムに対する Common LISP インタフェース ) も利用でき、 CLISP の下で走ります。 CLX を使用すれば、 X べー スのアプリケーションを LISP で書くことができます。もう 1 つの LISP 実装である Austin Kyoto Common LISP も利用でき、 CLX とも互換性があります。 アムステルダム大学の Jan Wielemaker 氏が実装した非常によくできた Prolog 、 SWI-Prolog も利用できます。 Prolog は論理べースの言語で、論理式を基に、その 妥当性を検査するための経験則を作り、それらに基づいて決定を行うことができます。 これは、 AI アプリケーションに非常に役立つ言語です。 また、 MIT Scheme ( R4 規格に準拠した完全な Scheme インタブリタ ) を含むい くつかの Scheme インタブリタも利用できます。 Scheme は LISP の方言で、より簡 潔でより一般的なプログラミングモデルを備えています。それは、コンピュータ科学 アプリケーションやアルゴリズムの研究に適した LISP 方言です。 Ada では、 AdaEd (Ada インタブリタ ) と GNAT (GNU Ada トランスレータ ) の 2 つが利用できます。 GNAT は成熟した最適化 Ada コンパイラです。それと Ada 注 7 parentheses には余談という意味もあります ( 訳注 ) 。
6.7 との関係は、 gcc と C 、 C 十十との関係に似ています。 gdb によるデバッグ・ 503 ちなみに、ほかにも Linux で人気のある言語翻訳プログラムが 2 つあります。 1 つ は Pascal から C へのトランスレータ p2c 、もう 1 つは FORTRAN から C へのトラ ンスレータ f2c です。これらのトランスレータが本物のコンパイラとしての役割を果 たさないことを心配しているとしたら、その必要はありません。 p2c と f2c は両方と も強力で、 PascaI と FORTRAN のヘビーな使用に耐えることが実証されています。 f2c は FORTRAN-77 準拠で、それ専用の多くのツールも利用できます。 ftnchek は lint に似た FORTRAN 文法チェッカです。数値計算ライプラリ LAPACK と多倍 精度 FORTRAN ライプラリ mpfun は、 f2c を使用して Linux に移植されました。 toolpack は、ソースコード整形印刷プログラム、精度変換プログラム、可搬性チェ ッカなどといった FORTRAN ツールの集まりです。 Linux で利用できるそのほかの言語には、 APL 、 Rexx 、 Forth に対するインタブ リタ、 Simula から C へのトランスレータがあります。コンパイラツール lex と yacc の GNU バージョン ( それぞれ flex と bison という名前です ) も Linux に移植され ました。 lex と yacc は、いろいろな種類のパーサやトランスレータを作成するのに 欠かせないツールで、コンパイラを書くのにもっともよく使用されます。 6.7 gdb によるテパッグ あなたは、コードを追跡するのにデバッガを使用するという考え方そのものを嘲笑 するタイプのプログラマのひとりですか。コードが複雑すぎて当のプログラマさえ理 解するのが難しい場合でも、バグは絶対に許されないというのがあなたの哲学ですか。 虫メガネとピンセットを使って、頭の中でコードを 1 行ずつ実行してみるのですか。 バグは、 + = の意味で = オペレータを使用してしまうというような、 1 文字の見落と しによって生ずることが多いのではありませんか。 そうだとすれば、 gdb (GNU デバッガ ) を使ってみるべきでしよう。 すでに知っているかどうかは別として、 gdb はあなたの良きパートナーで 文献目録 [ 54 ] す。バグによって、コアダンプ、メモリのリーク、不安定なふるまい ( プ ログラムとプログラマ双方について ) などが生じますが、 g 曲を使用すれば、わかり にくくてみつけるのが難しいバグを突き止めることができます。時として、コードの
5.1 vi を吏用してファイルを編集する・ 307 あと、直ちに挿入されます。次にカーソルを動かし、 p を使用することによって、そ のテキストのほかの場所にペーストすることができます。 dd と似ているのが yy コマンドで、これはテキストを削除しないで「ヤンク (yank) 」 ( アンドウバッフアにコピーすること ) します。 dd と同じように、ヤンク したテキストは p を使用してペーストできます。削除とヤンクのコマンドは、行だ けでなく一般の領域に対しても使用することができます。 d コマンドが移動コマンド と組み合わせてテキストを削除できることを思い出してください。たとえば、 d$ は カーソル位置からその行の末尾までのテキストを削除します。同様に、 y$ はカーソ ル位置からその行の末尾までのテキストをャンクします。 いまテキストのある領域をャンク ( または削除 ) したいとしましよう。これもマー クを利用して行うことができます。ャンクしたいテキストの先頭にカーソルを移動し、 ma でマークをセットしてください。ャンクしたいテキストの末尾にカーソルを移動 してから、コマンド y'a. を使用します。これで、カーソル位置からマーク a までの テキストがヤンクされます ( コマンド 'a がカーソルをマーク a まで動かすことを思 い出してください ) 。 y の代わりに d を使うと、カーソルの位置からそのマークまで のテキストが削除されます。 ⅵで、テキストの一部をカット、コピー、ペーストするもっとも便利な方法は、 レジスタを使用することです。レジスタは名前の付いた一時的な記憶領域で、ある場 所から別の場所にテキストをコピーしたり、ドキュメントの内部でカット & ペースト したりするのに利用します。 レジスタには 1 文字の名前が付けられます。 a から z または A から Z のいずれか の文字が使用できます。 ' コマンド ( 引用符 ) がレジスタを指定するために使用され ます。つまり、レジスタ a を指定するときは、 "a のように、 " のあとにレジスタ名を 付けます。 たとえば、下の例の最初の行にカーソルを移動し、 NOW IS THE TIME FOR ALL GOOD WOMEN TO COME TO THE AID OF THE PARTY. Afterwards, we'll go out for burgers and fries.
7.2 World Wide Web ・ 625 が実行されなければならないことを指定しています。次節で、このスクリプトを書く 方法を解説します。 7 ~ 9 目では、く input 〉タグを使用しています。これはフォームの中でもっともよく 使われるタグで、テキストフィールド、ボタン、チェックボックスなどの人力項目を 指定します。く input 〉タグには、いくつかの属性があります。 name 属性は、サーバスクリプトに対して、このタグを識別するために使用する名 前を指定します。同じ名前を複数のタグに使わないようにしましよう。 type 属性は 入力項目のタイプを指定します。その値としては、 text 、 radio 、 checkbox 、 pass- word 、 submit 、 reset 、 hidden が使用できます。 type が指定されないとき ( 7 、 8 行目 ) は、デフォルトとして text が使用されます。 value 属性は、この入力項目に 対するデフォルト値を指定します。 く input> に対しては、ほかにもいくつかの属性が利用できます。それらは、テキス ト人力フィールドなどに対する入力の最大長を設定します。 7 行目と 8 行目では、 ' fro 心および ' subjec じという名前の入力項目を定義してい ます。両方ともタイプは text です。これらのテキスト入力フィールドは、送信者の email アドレスとメッセージの主題を人力するために使用されます。 9 行目では、メールの送り先となる email アドレスを設定する、 "to" という名前の hidden 項目を定義しています。このテクニックを使用すれば、 HTML フォーム内 で受信者の email アドレスを指定することができます。さもなければ、サーバスク リプト (mailer. (l) の中に受信者のアドレスを指定しなければなりません。その場 このように、 ' to " 項目の値としてアドレスが指定してある限り、シス 合には、このメールフォームを使用したい各ューザが、個人用のスクリプトを持っ必 要があります。 テム上のどのユーザも同じスクリプトを使用することができます。その理由は、次節 は、く textarea 〉のサイズを設定するために使用されます。 その要素に名前を付けるために、 name 属性が使用されています。 cols と rows 属性 ロールバーを持っ複数行のテキスト入力フィールドを表示します。く input 〉と同様に 13 行目では、く textarea 〉タグを使用しています。このタグは、右端と下端にスク で明らかになるでしよう。そこでは、 mailer. pl スクリプト自体について解説します。 にくるという点に注意してください。く textarea> とく /textarea> の間にあるテキス く input 〉と違って、く textarea 〉タグでは、対応するく / textarea 〉終了タグが同じ行
6.1 gcc によるプログラミング・ 453 きます。これを利用して、デバッガ ( したがって、プログラマ ) はプログラムの動き を追跡することができます。コンパイラはオプジェクトファイルの中に目印を挿入し ます。それを使用して、デバッガはコンパイル済みプログラム中の特定の行、変数、 関数を識別することができます。それゆえ、 gdb ( 本章の後ろの方で解説します ) の ようなデバッガを使用すると、コンパイル済みプログラムを 1 行ずっ実行しながら、 同時に元のソーステキストを見ることができます。 gcc が提供してくれるほかの機能としては、文字通りスイッチを付けるだけでアセ ンプリコードを生成する能力が挙げられます。ソースをマシンコードにコンパイルす るよう gcc に指示する代わりに、人間にとって理解しやすいアセンプリ言語レベル に留めるよう依頼することができます。これは、 Linux 上でアセンプリ言語によるプ ロテクトモードのプログラミングの複雑さを学ぶ素晴らしい方法になります。何らか の C コードを書き、それを gcc でアセンプリ言語に翻訳して、研究するわけです。 このアセンプリ言語コードがどのようにアセンプルされるのかを知りたい場合に備 えて、 gcc には固有のアセンプラが含まれています ( これは、 gcc とは独立して使用 することができます ) 。実際、インライン・アセンプリコードを C のソースコードの 中に含めることもできます。特に技巧をこらした汚い手を使いたいが、アセンプリ言 語のみで書きたくない場合に役に立ちます。 6.1.3 基本的な gcc の使用方法 こまでの説明から、これらの素晴しい機能を利用する方法を知りたくて、きっと うずうずしていることでしよう。特に UNIX が初めての C プログラマにとっては、 gcc の効果的な使用法を知ることが重要です。 gcc のようなコマンドライン型のコン パイラの使い方は、たとえば、 MS-DOS の下で Borland C のような開発システムを 使用するのとは、だいぶ様子が異なります。言語の構文自体は似ていますが、プログ ラムをコンパイルしリンクするための方法は、まったく違います。 上の問題なさそうに見える「 He110 、 World! 」の例に戻って、このプログラムをコ ンパイルし、リンクするにはどのようにすればよいのかを見てみましよう。 最初のステップは、もちろんソースコードを入力することです。これは、 Emacs やⅵといったテキストエデイタを使用すれば簡単にできます。プログラマを自称す る方であれば、ソースコードを入力して、それを he110. c といった名前のファイルに
534 ・ 6 章 Linux におけるプログラミング ールを使っても、この作業はしばしば必要以上に骨の折れる仕事になります。 これを解決する 1 つの方法は、 imake を使用することです。 imake は、 C のプリ プロセッサをベースにして、 make を拡張したものです。 imake は単なる Makefile ジェネレータです。 lmakefile を書いておけば、 imake がちゃんとした Makefile に 変換してくれます。 imake は X Window システムのパッケージにあるプログラムで使用されています が、 X アプリケーションだけに制限されているわけではありません。特に C プログ ラムをコンパイルする場合に imake を使用すると、 Makefiles を書く作業が簡単に なるという点に注意してください。しかし、 make はこれよりもずっと一般的な仕事 に適用できます。たとえば、 make を利用すれば、 groff や T を使って自動的にド キュメントを整形することができます。この場合は、 make を単独で使用したほうが 柔軟性があるので、 imake はもっともよい解決方法とは言えないかもしれません。 以下に挙げたのは、 2 つのプログラム laplacian と getstat を構築する lmakefile の例です。 lmakefile の一番上に、コンパイル全体に対するオプションが指定されて います (imake はこれらに対するデフォルトを持っていますが、それらはいつも役 に立っとは限りません ) 。それに続いて、コンパイルされる各プログラムのために変 数が定義されています。そして、これらのプログラムをコンパイルするための Make- file 規則を作成するために、 imake マクロ AllTarget と NormalProgramTarget が使われています。 # Linker options: -L/usr/Iocal/lib -L.. /lib LDOPTIONS # The C compiler tO use: CC = gcc # FIags tO be used with gcc: -I. -I$(HOME)/include -g CFLAGS # Local and system libraries tO link against: -lvistuff LOCAL LIBRARIES SYS LIBRARIES -lm # Specify the sources in the SRCS variable, and the corresponding Object # files in the variable LAP_OBJS. SRCS = laplacian. c laplacian-main. c LAP_OBJS = laplacian. 0 laplacian-main. 0