diff --git a/ja_JP.eucJP/man/man1/compress.1 b/ja_JP.eucJP/man/man1/compress.1 index fefbbcbdc2..5b42464d80 100644 --- a/ja_JP.eucJP/man/man1/compress.1 +++ b/ja_JP.eucJP/man/man1/compress.1 @@ -1,182 +1,183 @@ .\" Copyright (c) 1986, 1990, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" James A. Woods, derived from original work by Spencer Thomas .\" and Joseph Orost. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)compress.1 8.2 (Berkeley) 4/18/94 .\" %FreeBSD: src/usr.bin/compress/compress.1,v 1.17 2002/05/29 18:12:21 ru Exp % .\" $FreeBSD$ .\" .Dd May 17, 2002 .Dt COMPRESS 1 .Os .Sh 名称 .Nm compress , .Nm uncompress .Nd データを圧縮、展開する .Sh 書式 .Nm compress .Op Fl cfv .Op Fl b Ar bits .Op Ar .Nm uncompress .Op Fl cfv .Op Ar .Sh 解説 .Nm ユーティリティは adaptive Lempel-Ziv 法を用いて、ファイルを圧縮します。 個々の圧縮された .Ar file は、元のファイル名に拡張子 .Dq .Z -を付加したものにリネームされます。そして、ファイルの更新時刻、 -最終アクセス時刻、ファイルフラグ、モード、ユーザID、グループID の大半 -は、パーミッションの許す範囲で圧縮ファイルに引き継がれます。 +を付加したものにリネームされます。 +そして、ファイルの更新時刻、最終アクセス時刻、ファイルフラグ、モード、 +ユーザ ID、グループ ID の大半は、パーミッションの許す範囲で圧縮ファイルに +引き継がれます。 もし圧縮しても .Ar file のサイズが小さくならない場合、compress はそのファイルを無視します。 .Pp .Nm uncompress ユーティリティは、compress されたファイルを元通りのファイルにリストアし、 ファイル名を拡張子 .Dq .Z を除いたものにリネームします。 .Pp -compress, uncompress によってリネームされるファイルの名前がすでに存在 -し、標準入力が端末の場合は、上書きしてもよいか確認を求めるプロンプトが +compress, uncompress によってリネームされるファイルの名前がすでに存在し、 +標準入力が端末の場合は、上書きしてもよいか確認を求めるプロンプトが (標準エラー出力に) 出力されます。 プロンプトが出せなかったり、確認の回答が得られなかった場合には、 ファイルは上書きされません。 .Pp ファイル名が指定されなかった場合または .Ar file 引数が単一のダッシュ .Pq Sq Fl の場合、標準入力からのデータが圧縮もしくは 展開され、結果が標準出力に出力されます。 入力および出力ファイルが通常ファイルでない場合、圧縮後のサイズの チェックとファイルの上書きチェックは行なわれません。 入力ファイルは削除されず、また入力ファイルの属性は引き継がれません。 .Pp オプションは以下のものがあります: .Bl -tag -width indent .It Fl b .Ar bits -コードの上限値を指定します(以下を参照)。 +コードの上限値を指定します (以下を参照)。 .It Fl c compressed または uncompressed の出力を標準出力に出します。 入力元のファイルは参照されるのみで変更されません。 .It Fl f -ファイル長が小さくなるならないにかかわらず、ファイルの圧縮を強行 -します。また、圧縮ファイルと同名のファイルがすでに存在しても、確認を +ファイル長が小さくなるならないにかかわらず、ファイルの圧縮を強行します。 +また、圧縮ファイルと同名のファイルがすでに存在しても、確認を 求めることなく強制的にファイルの上書きを行ないます。 .It Fl v 圧縮後、ファイルサイズがどれだけ減ったかをパーセント表示します。 .El .Pp .Nm ユーティリティは Lempel-Ziv 修正アルゴリズムを使用します。 ファイル内の重複する部分文字列は、まず、257 以上の 9ビットコードに -置き換えられます。コードが 512 に達すると、アルゴリズムは -10ビットコードへ切り替えられ、 +置き換えられます。 +コードが 512 に達すると、アルゴリズムは 10 ビットコードへ切り替えられ、 .Fl b -フラグによって指定された上限(デフォルトは16)に達するまで、更に上の +フラグによって指定された上限 (デフォルトは 16) に達するまで、更に上の ビットを使っていきます。 .Ar Bits は、9 から 16 の範囲になければなりません。 .Pp .Ar bits の上限に達すると、 .Nm は圧縮率を定期的にチェックします。 圧縮率が上がっているとき、 .Nm は既存のコード辞書を使い続けますが、 圧縮率が下がったときは .Nm は、部分文字列のテーブルを破棄し、最初からテーブルを作り直します。 こうして、アルゴリズムをファイルの次の "block" へ適用していくことが できます。 .Pp ランダムデータの展開または圧縮されたデータの再圧縮を行わないように するためのマジックナンバと共に、圧縮の際に指定された .Ar bits パラメータがエンコードされ、圧縮ファイルの中に保存されるため、 .Nm uncompress では .Fl b フラグが省略されています。 .Pp 得られる圧縮の量は、入力サイズ、コードあたりの .Ar bits の数, および重複する部分文字列の分布に依存しています。 普通、ソースコードや英語のテキストは、50\-60% 圧縮されます。 -一般的に (packコマンドで使われている) Huffman法、または -(compactコマンドで使われている)最適化Huffman法よって得られるより、圧縮 -は良く、計算時間もかかりません。 +一般的に (pack コマンドで使われている) Huffman 法、または +(compact コマンドで使われている) 最適化 Huffman 法によって得られるより、 +圧縮は良く、計算時間もかかりません。 .Sh 診断 .Ex -std compress uncompress .Pp 圧縮を試みたファイルの大きさが減少しない場合で .Fl f オプションが指定されなかった場合、ユーティリティ .Nm compress は 2 で終了します。 .Sh 関連項目 .Xr gunzip 1 , .Xr gzexe 1 , .Xr gzip 1 , .Xr zcat 1 , .Xr zmore 1 , .Xr znew 1 .Rs .%A Welch, Terry A. .%D June, 1984 .%T "A Technique for High Performance Data Compression" .%J "IEEE Computer" .%V 17:6 .%P pp. 8-19 .Re .Sh 規格 ユーティリティ .Nm compress および .Nm uncompress は .St -p1003.1-2001 に適合しています。 .Sh 歴史 .Nm コマンドは .Bx 4.3 から登場しました。 diff --git a/ja_JP.eucJP/man/man1/ee.1 b/ja_JP.eucJP/man/man1/ee.1 index 0984f10704..4bb282d8af 100644 --- a/ja_JP.eucJP/man/man1/ee.1 +++ b/ja_JP.eucJP/man/man1/ee.1 @@ -1,593 +1,593 @@ .\" .\" %FreeBSD: src/usr.bin/ee/ee.1,v 1.15 2003/04/30 19:18:50 schweikh Exp % .\" .\" $FreeBSD$ .Dd August 30, 1995 .Dt EE 1 .Os .Sh 名称 .Nm ee .Nd 簡単エディタ .Sh 書式 .Nm ee .Op Fl eih .Op +# .Op Ar .Nm ree .Op Fl eih .Op +# .Op Ar .Sh 解説 .Nm ユーティリティはシンプルなスクリーンエディタで、 端末の下部にプロンプトがあるか、 (端末中央の箱の中に) メニューがあるとき以外は、 常にテキスト挿入モードになっています。 .Nm ree ユーティリティは .Nm と同じものですが、指定されたファイルの編集しかできない (ファィル操作やシェル を使うことができない) ように機能が制限されています。 .Pp .Nm を正常に動作させるためには、使用する端末のタイプに合わせて、環境変数 .Ev TERM を正しく設定しなければなりません。例えば、 .Tn HP 700/92 端末の場合は、 .Ev TERM 変数を "70092" に設定する必要があります。 更に詳しい情報が必要な場合は、システム管理者にお尋ねください。 .Pp 下記のオプションが使用可能です: .Bl -tag -width indent .It Fl e タブからスペースへの展開を禁止します。 .It Fl i 端末上部に情報ウィンドウを表示しません。 .It Fl h ウィンドウとメニューの縁の強調表示を止めます (一部の端末で 表示速度が向上します)。 .It Sy +# スタート時のカーソルを行番号 '#' で指定される行に置きます。 .El .Ss "コントルールキー" テキストの挿入以外の操作では、コントロールキー ( .Li Control キーは "^" で表示され、例えば ^a のように、 アルファベットキーと組み合わせて使われます) や、 キーボード上にあるファンクションキー ( .Em "Next Page" , .Em "Prev Page" , 矢印キー等) を使わなければなりません。 .Pp すべての端末がファンクションキーを持っているわけではありませんから、 .Nm ではコントロールキーに割り当てられた基本的なカーソル移動は、 キーボードに装備された、より直感的なキーでも扱えるようにしてあります。例えば、 カーソルの上方移動は、上向き矢印キーと .Em ^u のいずれでも可能です。 .Bl -tag -width indent .It ^a 挿入文字を ASCII の 10 進数で指定。 .It ^b テキストの終わりに移動。 .It ^c コマンド入力。 .It ^d カーソルを下に移動。 .It ^e 検索文字列を入力。 .It ^f 最後に削除した文字の復元。 .It ^g 行の先頭に移動。 .It ^h バックスペース。 .It ^i タブ。 .It ^j 改行を挿入。 .It ^k カーソル上の文字を消去。 .It ^l カーソルを左に移動。 .It ^m 改行を挿入 .It ^n 次ページに移動。 .It ^o 行末に移動。 .It ^p 前ページに移動。 .It ^r カーソルを右に移動。 .It ^t テキスト先頭に移動。 .It ^u カーソルを上に移動。 .It ^v 最後に削除した単語を復元。 .It ^w カーソル位置以降の単語を削除。 .It ^x 文字列検索。 .It ^y カーソル位置から行末まで削除。 .It ^z 最後に削除した行の復元。 .It ^[ (ESC) メニュー表示。 .El .Ss "EMACS キーモード" 多くのシェルは (カーソル移動その他の編集操作で) Emacs モードを 用意していますから、それらのキー割当に慣れた利用者のために、 -いくつかのキー割当が別途用意さています。これは +いくつかのキー割当が別途用意されています。これは .Em 設定 メニューないしは初期化ファイル (下記を参照) から利用することができ、 その内容は次のとおりです: .Bl -tag -width indent .It ^a 行の先頭に移動。 .It ^b 1 文字後退。 .It ^c コマンド入力。 .It ^d カーソル位置の文字を消去。 .It ^e 行末に移動。 .It ^f 1 文字前進。 .It ^g 1 ページ戻る。 .It ^h バックスペース。 .It ^i タブ。 .It ^j 最後に削除した文字の復元。 .It ^k 行の削除。 .It ^l 最後に削除した行の復元。 .It ^m 改行の挿入。 .It ^n 次行に移動。 .It ^o 挿入文字を ASCII の 10 進数で指定。 .It ^p 前行に戻る。 .It ^r 最後に削除した後の復元。 .It ^t テキストの先頭に移動。 .It ^u テキストの最後に移動。 .It ^v 次ページに移動。 .It ^w カーソル以降の単語を削除。 .It ^y 検索文字列の入力。 .It ^z 次の単語。 .It ^[ (ESC) メニュー表示。 .El .Ss "ファンクションキー" .Bl -tag -width indent .It Next Page 次ページに移動。 .It Prev Page 前ページに移動。 .It Delete Char カーソル位置の文字を消去。 .It Delete Line カーソル位置から行末まで消去。 .It Insert line カーソル位置に改行を挿入。 .It Arrow keys 表示された方向にカーソルを移動。 .El .Ss コマンド ある種の操作では単一のキー操作で得られる以上の情報を必要とします。 基本的な操作のほとんどには、 .Tn ESC キーで表示されるメニューが用意されていますが、 それらに加え、いくつかの操作は、コマンド入力 (^c) に続いて 下記のうち一つをタイプすることで実行できます。 .Bl -tag -width indent .It ! Ns Ar cmd シェルを使って .Ar cmd を実行。 .It 0-9 指定された行番号に移動。 .It case 文字列検察で大文字と小文字を区別。 .It character カーソル位置の文字の ASCII 値を表示。 .It exit 編集したテキストを保存して終了。 .It expand タブをスペースに展開。 .It file ファイル名を表示。 .It help ヘルプ画面を表示。 .It line 現在行の行番号を表示。 .It nocase 文字列検索で大文字と小文字を区別しない (デフォルト)。 .It noexpand TAB キーが押されたとき、タブをスペースに展開しない。 .It quit テキストに加えられた変更を保存せずに終了。 .It read Ar file 指定されたファイル .Ar file を読み込む。 .It write Ar file 指定されたファイル .Ar file にテキストを書き込む。 .El .Ss "メニュー操作" .Em escape キー (存在しない場合は .Em ^[ ) を押すとメニューがでてきます。 メニューの中で escape キーを押すと、何もしないでメニューから抜け出すことが できます。上向き矢印と下向き矢印ないしは、上なら .Em ^u 下なら .Em ^d で希望する項目に移動して、 .Em return キーを押せば、その処理が実行されます。 .Pp メニュー項目の左側の文字のキーを押すと、そのメニューエントリを 選択することになります。 .Pp .Nm のメインメニューは次のとおりです: .Bl -tag -width indent .It leave editor 終了。 変更されている場合は、変更後のテキストを保存するかどうかの問い合わせ メニューが出ます。 .It help ヘルプ。 すべてのキー操作とコマンドを含むヘルプ画面を表示。 .It file operations ファイル操作。 ファイルの読み込み、書き込み、保存に加え、 編集内容の印刷コマンドへの送信メニュー ( .Sx "ファイルによる ee の初期化" を参照)。 .It redraw screen 画面再描画。 画面が乱れたとき画面を再描画するための手段。 .It settings 設定。 現在の操作モードと右マージンを表示。特定の項目上で return キーを押すと、 その値を変更できます。 このメニューから抜ける場合は .Em escape キーを押します。(下記の .Sx モード を参照。) .It search 検索。 新しい検索文字列ないしは既に設定した検索文字列で検索するためのメニュー。 .It miscellaneous その他。 現在の段落の整形、シェルコマンドの実行、編集中のテキストのスペルチェック を行うためのメニュー。 .El .Ss "段落整形" .Nm の段落 (paragraph) は、下記のいずれかで囲まれた部分を意味します: .Bl -bullet -width indent .It ファイルの先頭と終わり。 .It 文字を含まないない行、ないしは、スペースとタブのみの行。 .It ピリオド ('.') か 大なり記号 ('>') で始まる行。 .El .Pp 段落整形を行う方法としては、メニューの .Em 段落整形(format paragraph) を選択して明示的に行う方法と、段落の自動整形を行うように .Nm を設定する方法の二つがあります。 自動モードはメニューからでも、初期化ファイルからでも設定可能です。 .Pp .Nm のテキスト操作には、自由形式 (free-form)、マージン (margins)、 自動整形 (automatic formatting) の3つの状態があります: .Pp 「自由形式」はプログラミングのような仕事に最適で、行の長さの制限がなく、 整形も行われません。 .Pp 「マージン」を使うと、右マージン (これは .Em 設定 (settings) メニューで指定しますが、 デフォルトは端末の右縁になっています) を越えていないかどうかを気にせずに テキストをタイプすることができます。 このモードでは .Em 段落整形 (format paragraph) メニュー項目が動作します。 .Pp 「自動整形」はワードプロセッサのようなふるまいをします。 ユーザがテキストを入力する一方で、 空白文字が入力されるかテキストを削除するたびに、 .Nm は段落全体が端末の幅を越えないように調整します。 自動整形を使う場合は、マージンも有効にしておかなければなりません。 .Ss モード .Nm そのものは「モードなし」(modeless) エディタ (常にテキスト挿入モードに なっています) ですが、その動作の中には次のようなモードをもつものもあります: .Bl -tag -width indent .It タブ拡張 タブ文字として挿入するか、空白文字に置換するかを決めます。 .It 大文字と小文字の区別 文字列検索では、大文字と小文字を区別することもできますし、 同一視させることもできます。 .It マージン監視 行の長さを右マージンまでに制限することもできますし、 無限に長くすることもできます。 .It 段落の自動整形 テキストの入力中、うまく画面の幅に収まるように、 エディタに調整させることができます。 .It 8 ビット文字 8 ビット文字をそのまま表示させるか、 その値を山括弧で囲んで表示 ("<220>" 等) させるかの切り替えです。 .It 情報ウィンドウ 実行可能なキー操作を表示するウィンドウを出すか出さないかを選択します。 .It emacs キー割り当て コントロールキーの割り当てを emacs 方式にするかどうかを決めます。 .It 16 ビット文字 16 ビット文字を 1 個の 16 ビット量として扱うのか、2 個の 8 ビット量として 扱うのかを切り替えます。 主として、Chinese Big 5 コードセットで動作します。 .El .Pp これらのモードは初期化ファイル (下記を参照) とメニュー (上記を参照) の いずれでも設定可能です。 .Ss "スペルチェック" .Nm でテキストに含まれる単語のスペルをチェックする方法には、 伝統的な .Xr spell 1 コマンドを使う方法と、オプションの .Nm ispell コマンドを使う方法の二つがあります。 .Pp .Nm spell を使う場合は、認識できない単語はファイルの先頭に置かれます。 .Nm ispell の場合は、ファィルをいったんディスクに書き出し、 .Nm ispell にそのファイルを処理させてから、 .Nm ispell が書き換えたファイルを再度読み込みます。 .Ss "編集内容の印刷" メニューの中に編集内容を印刷する項目があります。 .Nm ユーティリティは初期化コマンドの .Em printcommand (下記の .Sx "ファイルによる ee の初期化" を参照) で指定されたコマンドに編集中のテキストをパイプで転送します。 デフォルトでは .Xr lp 1 コマンドに転送します。 .Pp .Em printcommand で指定されたコマンドは、標準入力からテキストを読み込むものでなければ なりません。詳細はシステム管理者に聞いてください。 .Ss "シェルの操作" .Em その他 (miscellaneous) のメニューで .Em シェルコマンド (shell command) を選ぶか、 .Em command: プロンプトで感嘆符 ("!") に続けて実行したいコマンドを書くことで、 .Nm の中からシェルにコマンドを実行させることができます。さらに、"!' の前に 「大なり記号」(">") を書くことで、編集バッファの内容をシェルコマンドに リダイレクトすることができます。 同様に、感嘆符の前に「小なり記号」("<") を書くと、 シェルコマンドの実行結果を編集バッファに取り込みます。 これらを同時に指定することで、シェルコマンドに出力した後、コマンドの 実行結果を読み直すことも可能です。 従って、エディタで編集中の単語のリストをソートしたい場合は、 コマンド入力で次のようにタイプすることができます: .Dl >" のように山括弧で囲まれた数値 で表示します)。 .It 16bit 16 ビット文字を扱います。 .It no16bit 16 ビット文字を扱いません。 .It emacs emacs のキー割り当てにします。 .It noemacs emacs のキー割り当てをやめます。 .El .Ss "エディタの設定の保存" .Em settings メニューからこのエントリを使用すると、 ユーザは現在のエディタの設定 (前記 .Sx "ファイルによる ee の初期化" 参照) を現在のディレクトリもしくはユーザのホームディレクトリのファイル .Pa .init.ee に保存できます。 既に存在するファイル .Pa .init.ee は .Pa .init.ee.old にリネームされます。 .Sh 警告 (原文) .\" こういう部分は日本語訳により細かなニュアンスが変わって問題になる .\" かもしれないので、原文のままにしてあります。 sakai@jp.freebsd.org 1997.6.19 THIS MATERIAL IS PROVIDED "AS IS". THERE ARE NO WARRANTIES OF ANY KIND WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Neither Hewlett-Packard nor Hugh Mahon shall be liable for errors contained herein, nor for incidental or consequential damages in connection with the furnishing, performance or use of this material. Neither Hewlett-Packard nor Hugh Mahon assumes any responsibility for the use or reliability of this software or documentation. This software and documentation is totally UNSUPPORTED. There is no support contract available. Hewlett-Packard has done NO Quality Assurance on ANY of the program or documentation. You may find the quality of the materials inferior to supported materials. .Pp Always make a copy of files that cannot be easily reproduced before editing. Save files early, and save often. .Pp (上記段落の日本語訳 −参考−) .br このプログラムはこのままの状態 (AS IS) で供給されるもので、実用性や特定用途 に対する適合性を含む、いかなる保証もありません。Hewlett-Packard と Hugh Mahon のいずれも、このプログラムの間違い、あるいは、設置や使用に付随ないしは結果と して生ずるいかなる問題についても責任を負いません。Hewlett-Packard と Hugh Mahon のいずれも、このプログラムとドキュメントの信頼性に対する責任を負いませ ん。このプログラムとドキュメントに対するサポートはありませんし、サポートの窓 口もありません。Hewlett-Packard はプログラムとドキュメントの品質検査行ってい ません。サポートのある製品にくらべて品質が劣る可能性もあります。 .Pp 編集前の状態に戻すのが困難なファイルについては、常にコピーを残してください。 早めにファイルに保存し、小刻みに保存操作を行ってください。 .Ss "国際コードセットのサポート" .Nm ユーティリティは 8 ビット文字コード (8 ビットクリーン) または Chinese Big-5 コードセットをサポートしています (他のマルチバイトコードセットも動作するかもしれませんが、 Big-5 が動作する理由は、2 バイト文字は画面上で 2 桁を占めるためです)。 .Sh 警告 低速システムでは、段落自動整形は極端に遅くなります。 .Sh 関連ファイル .Bl -tag -width /usr/share/misc/init.ee -compact .It Pa /usr/share/misc/init.ee .It Pa $HOME/.init.ee .It Pa .init.ee .El .Sh 作者 ソフトウェア .Nm は .An Hugh Mahon が開発しました。 .Pp .\" 以下の部分も原文を残し、和訳併記としてあります。 .\" sakai@jp.freebsd.org 1997.6.19 This software and documentation contains proprietary information which is protected by copyright. All rights are reserved. .Pp (上記段落の日本語訳 −参考−) .br このプログラムとドキュメントは著作権法により保護されており、 すべての権利は著作者が有します。 .Pp Copyright (c) 1990, 1991, 1992, 1993, 1995, 1996 Hugh Mahon. .Sh "関連項目" .Xr ispell 1 , .Xr lpr 1 , .Xr spell 1 , .Xr termcap 5 , .Xr terminfo 5 , .Xr environ 7 .Sh 日本語マニュアル 平林浩一 (kh@mogami-wire.co.jp) による ee 日本語化キットに含まれている 日本語化 ee の日本語マニュアルをベースに、 酒井淳嗣 (sakai@jp.freebsd.org) が一部修正。 diff --git a/ja_JP.eucJP/man/man1/gasp.1 b/ja_JP.eucJP/man/man1/gasp.1 index 7f370c35fc..11c85d6de3 100644 --- a/ja_JP.eucJP/man/man1/gasp.1 +++ b/ja_JP.eucJP/man/man1/gasp.1 @@ -1,115 +1,115 @@ .\" Copyright (c) 1999 .\" The Regents of the University of California. All rights reserved. .\" and David E. O'Brien .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %FreeBSD: src/gnu/usr.bin/binutils/gasp/gasp.1,v 1.3 2001/04/18 15:51:07 ru Exp % .\" .\" $FreeBSD$ .Dd December 29, 1999 .Dt GASP 1 .Os .Sh 名称 .Nm gasp .Nd GNU アセンブラのマクロプリプロセッサ .Sh 書式 .Nm .Op Fl adhMpsuv .Op Fl c Ar char .Op Fl o Ar outfile .Op Fl D Ns Ar name=value .Op Fl I Ns Ar path .Op infile .Sh 解説 .Nm は GNU アセンブラのマクロプリプロセッサです。 引数 .Ar infile が処理されてその結果のテキストが標準出力へ送られます。 .Pp オプションは以下の通りです。 .Bl -tag -width "-Dname=value" .It Fl a 代替マクロモードになります。 .Op Fl \-alternate とも指定出来ます。 .It Fl c Ar char コメント文字を `!' から変更します。 .Op Fl \-commentchar\ char とも指定出来ます。 .It Fl d 限定的なデバッグ情報を印字します。 .Op Fl \-debug とも指定出来ます。 .It Fl h -へルプメッセージを印字します。 +ヘルプメッセージを印字します。 .Op Fl \-help とも指定出来ます。 .It Fl M MRI 互換モードになります。 .Op Fl \-mri とも指定出来ます。 .It Fl o Ar outfile 出力ファイルを指定します。 .Op Fl \-output\ outfile とも指定出来ます。 .It Fl p 行番号を印字します。 .Op Fl \-print とも指定出来ます。 .It Fl s ソースファイルをコメントとしてコピーします。 .Op Fl \-copysource とも指定出来ます。 .It Fl u 不適切な入れ子を許します。 .Op Fl \-unreasonable とも指定出来ます。 .It Fl v プログラムバージョンを印字して終了します。 .Op Fl \-version とも指定出来ます。 .It Fl D Ns Ar name=value プリプロセッサシンボル .Ar name を定義し、"value" で指定された値を持たせます。 .It Fl I Ns Ar path .Ar path をパスのリストに加えます。 .El .Sh 関連項目 .Xr cpp 1 , .Xr m4 1 .Rs .%T The gasp GNU hypertext system info pages .Re .Sh 歴史 .Nm このコマンドはGNU binutilsパッケージの一部です。 .Sh 作者 このマニュアルページは .An David E. O'Brien が書きました。 diff --git a/ja_JP.eucJP/man/man1/grolbp.1 b/ja_JP.eucJP/man/man1/grolbp.1 index 5052654160..72b9203272 100644 --- a/ja_JP.eucJP/man/man1/grolbp.1 +++ b/ja_JP.eucJP/man/man1/grolbp.1 @@ -1,343 +1,343 @@ '\" t .\" The above line should force the use of tbl as a preprocessor .\" vim: set syntax=nroff : .\" The above line should set vim into nroff mode .\" $FreeBSD$ .ig Copyright (C) 1994-2000, 2002 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English. Modified by Francisco Andres Verdu for the grolbp program. .. .\" $FreeBSD$ .de TQ .br .ns .TP \\$1 .. .\" Like TP, but if specified indent is more than half .\" the current line-length - indent, use the default indent. .de Tp .ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP .el .TP "\\$1" .. .TH GROLBP 1 "11 October 2002" "Groff Version 1.19" .SH 名称 grolbp \- Canon CAPSL プリンタ (LBP-4 と LBP-8 シリーズレーザプリンタ) 用 groff ドライバ . .SH 書式 .nr a \n(.j .ad l .nh .nr i \n(.i .in +\w'\fBgrolbp 'u .ti \niu .B grolpb .de OP .ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]" .el .RB "[\ " "\\$1" "\ ]" .. .OP \-l .OP \-\-landscape .OP \-v .OP \-\-version .OP \-c n .OP \-\-copies= numcopies .OP \-p paper_size .OP \-\-papersize= paper_size .OP \-o orientation .OP \-\-orientation= orientation .OP \-w width .OP \-\-linewidth= width .OP \-F dir .OP \-\-fontdir= dir .OP \-h .OP \-\-help .RI "[\ " files\|.\|.\|. "\ ]" .br .ad \na .hy . .SH 解説 .B grolbp は .B groff のドライバであり、Canon LBP\-4 と LBP\-8 プリンタに適した CPSL と VDM 形式の出力を生成します。 .LP grolj4 との互換性のために troff のものに加え、描画コマンドとして次のものが利用可能です: .TP .BI \eD'R\ dh\ dv ' 現在の位置と、現在の位置 .RI +( dh , dv ) とを対角とする罫線 (つまり黒く塗りつぶした矩形) を描きます。 .SH オプション 1 文字オプションとその引数との間には空白があってもなくても構いませんが、 長いオプション名とその引数との間には空白と、または等号記号 (`=') が 必要なことに注意してください。 .TP .BI \-c numcopies .TQ .BI \-\-copies= numcopies 各ページを .I numcopies 回印刷します。 .TP .B \-l .TQ .B \-\-landscape landscape にて文書を印刷します。 .TP .BI \-p paper_size .TQ .BI \-\-papersize= paper_size 用紙サイズを .IR paper_size にします。 .IR paper_size は .BR "用紙サイズ" 節で示された有効なサイズ種別である必要があります。 .TP .BI \-o orientation .TQ .BI \-\-orientation= orientation 文書を .I orientation 方向に印刷します。 .I orientation は `portrait' または `landscape' である必要があります。 .TP .BI \-w width .TQ .BI \-\-linewidth= width デフォルトの線の太さを M の横幅(em)の1000分の .I witdh にします。 本オプションを指定しないと、線の太さは 0.04\~em になります。 .TP .B \-v .TQ .B \-\-version バージョン番号を表示します。 .TP .BI \-F dir .TQ .BI \-\-fontdir= dir フォントとデバイス記述ファイルの検索パスの前に、ディレクトリ .IB dir /dev name を追加します。 .I name はデバイス名であり、通常は .BR lbp です。 .TP .B \-h .TQ .B \-\-help -簡単なへルプを表示します。 +簡単なヘルプを表示します。 .SH 書体 .\" XXX いまいちしっくりこない ドライバは Dutch, Swiss, Swiss-Narrow スケーラブル書体それぞれに対して、 Regular, Bold, Italic, Bold-Italic スタイルをサポートしています。 さらに Courier 書体の 8, 12 ポイント、 等幅 Elite 書体の 8, 10 ポイントそれぞれに対して Regular, Bold, Italic スタイルがサポートされています。 .PP これらのフォントを使用するためのフォント名を以下の表にまとめます: .PP .TS tab(|) allbox center; c c c c c ab c c c c . 書体 | Regular | Bold | Italic | Bold-Italic Dutch | TR | TB | TI | TBI Swiss | HR | HB | HI | HBI Swiss Narrow | HNR | HNB | HNI | HNBI Courier | CR | CB | CI | Elite | ER | EB | EI | .TE .PP .SH 用紙サイズ 用紙サイズは .B DESC ファイルまたは .BR grolbp に対するコマンド行オプションで指定できます。 用紙サイズが両方で指定された場合は、コマンド行オプションが .B DESC ファイルの内容よりも優先されます (この原則はページの向きにも 適用されます)。 .PP .B DESC ファイルで用紙サイズを指定するには .BR groff_font (1) を参照してください。 .\" jpman groff_font(5)? horikawa 2002/11/24 .PP コマンド行で用紙サイズを設定するには、 .sp 1 .in +2m .BI \-p \ paper-size .in -2m .sp 1 または .sp 1 .in +2m .BI \-\-papersize= paper-size .in -2m .sp 1 を他の .B grolbp オプションに加えます。 .I paper-size は .B DESC ファイルと同じ形式です。 .PP .B DESC ファイルやコマンド行で用紙サイズが指定されなかった場合には、 デフォルトサイズの A4 が使用されます。 .SH ページ向き ページサイズと同様、印刷ページの向き .RB ( portrait または .BR landscape ) は .B DESC ファイルまたはコマンド行オプションで指定できます。 ここでも大文字小文字の区別はありません。 .PP .B DESC ファイルで向きを設定するには、以下の行を書きます: .sp 1 .in +2m .B orientation .RB [ portrait | landscape ] .in -2m .sp 1 .B DESC ファイル中の最初の有効な orientation コマンドのみが使用されます。 .PP コマンド行オプションでページ向きを設定するには .B DESC ファイルと同じパラメータ .RB ( portrait または .BR landscape ) を .B \-o または .B \-\-orientation オプションで指定します。 また .B \-l オプションによる強制的な landscape でのページ印刷も可能です。 .SH フォントファイル形式 .BR groff_font (5) に記述されている通常コマンドに加えて、 .B grolbp は要求された時にプリンタに送るフォント名を指定するコマンド .I lbpname を用意しています。 このコマンドの文法は次のとおりです: .sp 1 .in +2m .B lbpname .I printer_font_name .in -2m .IP \(bu ビットマップフォントでは .I printer_font_name は次の形式です。 .sp 1 .in +2m .RI N\(la base_fontname \(ra\(la font_style \(ra .in -2m .sp 1 .\" XXX なんかしっくりこない .I base_fontname はプリンタのフォントリストに現れる名前から最初の 1 文字を除いた フォントサイズまで (フォントサイズは含まない) のフォント名です。 .I font_style は .BR R , .BR I , .BR B のうちの 1 文字で、それぞれ Roman, Italic, Bold のフォントスタイルを 示しています。 .IP 例えば、プリンタの .I font listing A がフォント `Nelite12I.ISO_USA' を表示した場合、フォント設定ファイルの 対応する項目は次のものになります。 .sp 1 .in +2m .B lbpname NeliteI .in -2m .IP ただし (前述した) 利用可能なビットマップフォントのフォント名と フォントサイズはプログラム中にハードコードされているため、 新しいビットマップフォントを追加でサポートするには .B grolbp を書き換える必要があることに注意してください。 .IP \(bu スケーラブルフォントでは、 .I printer_font_name はプリンタの .IR "font listing A" に表示されるフォント名と同じです。 .IP 例えば、プリンタの .I font listing A に `Swiss-Bold' と表示される、bold 体の `Swiss' を選択するのに必要な .B lbpname コマンド行は次のようになります。 .sp 1 .in +2m .B lbpname Swiss-Bold .in -2m .sp 1 .PP .B lbpname の引数は大文字小文字が区別されます。 .TP .B /usr/share/tmac/lbp.tmac .BR grolbp で使用するマクロ。 .SH 関連ファイル .TP .B /usr/share/groff_font/devlbp/DESC デバイス記述ファイルです。 .TP .BI /usr/share/groff_font/devlbp/ F .IR F というフォントに対する記述ファイルです。 .SH 関連項目 .BR groff (1), .BR troff (1), .BR groff_out (5), .BR groff_font (5), .BR groff_char (7) .\" .\" Local Variables: .\" mode: nroff .\" End: diff --git a/ja_JP.eucJP/man/man1/gzip.1 b/ja_JP.eucJP/man/man1/gzip.1 index c3900a03fe..aa6ad45ac0 100644 --- a/ja_JP.eucJP/man/man1/gzip.1 +++ b/ja_JP.eucJP/man/man1/gzip.1 @@ -1,488 +1,488 @@ .\" %FreeBSD: src/gnu/usr.bin/gzip/gzip.1,v 1.7 1999/09/20 09:15:15 phantom Exp % .\" $FreeBSD$ .TH GZIP 1 .SH 名称 gzip, gunzip, zcat \- ファイルの圧縮、伸長を行なう .SH 書式 .ll +8 .B gzip .RB [ " \-acdfhlLnNrtvV19 " ] .RB [ \-S\ suffix ] [ .I "name \&..." ] .ll -8 .br .B gunzip .RB [ " \-acfhlLnNrtvV " ] .RB [ \-S\ suffix ] [ .I "name \&..." ] .br .B zcat .RB [ " \-fhLV " ] [ .I "name \&..." ] .SH 解説 .I gzip は、Lempel-Ziv アルゴリズム (LZ77) を利用してファイルのサイズを減らします。 もし可能な場合は、ファイル名に .B "\&.gz," の拡張子をつけ、 ファイルの所有者やアクセス時間と更新時間を保存します。 (デフォルトの拡張子は、 VMS では .B "\-gz" 、MSDOS, OS/2 FAT, Windows NT FAT, Atari では .B "z" となります。) もし、ファイル名が指定されなかったり、ファイル名として "-" が指定されれば、 標準入力を圧縮し、結果を標準出力へ出力します。 .I gzip は、一般ファイルのみを圧縮します。 特に、シンボリックリンクは無視されます。 .PP もし、圧縮されたファイル名がファイルシステムにとって長ければ、 .I gzip は、その名前を縮めます。 .I gzip は、ファイル名の 3 文字以上の部分にのみ名前の縮小を試みます。 (部分とは、ドットによって分けられた所です。) もし、ファイル名が短かい部分のみで 構成されていた時は、最も長い部分を縮小します。例えば、ファイル名が 14 文字 という制限がある時、 gzip.msdos.exe は gzi.msd.exe.gz となります。 ファイル名の文字数が制限を持たないシステムでは、 ファイル名の縮小は行われません。 .PP デフォルトで .I gzip は、オリジナルのファイル名とタイムスタンプを圧縮されたファイル中に保存します。 これらは、 .B \-N オプション付きで伸長された時に、使われます。これは、圧縮されたファイル名が 縮小されていたり、ファイル転送後にタイムスタンプが保存されなかった時に 便利です。 .PP 圧縮されたファイルは、 .I gzip -d か .I gunzip か .I zcat を用い、オリジナルに戻すことが出来ます。 もし、圧縮されたファイルに保存されたオリジナルのファイル名がファイルシステムに 合わなければ、オリジナルのファイル名から新しいファイル名が作られます。 .PP .I gunzip は、コマンドライン上のファイルのリストを 受け取り、.gz, -gz, .z, -z, _z, .Z で終っていて、正しいマジックナンバーで 始まっているファイルを、 元の拡張子を取り除いた圧縮されていないファイルにします。 .I gunzip は、 .B "\&.tar.gz" や .B "\&.tar.Z" を省略した .B "\&.tgz" や .B "\&.taz" も認識します。 圧縮する時、 .I gzip は、 .B "\&.tar" ファイルのファイル名を縮めるかわりに .B "\&.tgz" を使います。 .PP .I gunzip は、 .I gzip, zip, compress, compress -H, pack で作られたファイルを伸長できます。 -入力されたファイルがどの方式で圧縮されいるかは自動的に判別されます。 +入力されたファイルがどの方式で圧縮されているかは自動的に判別されます。 最初の二つの方式を使うと、 .I gunzip は 32ビット CRC をチェックします。 .I pack の場合、 .I gunzip は伸長された大きさをチェックします。標準の .I compress は一貫性のチェックをするように設計されていませんでしたが、 .I gunzip は .Z ファイルが正しくないことを検出できることもあります。 もし .Z ファイルを伸長する時にエラーに会う場合には、 標準の .I uncompress がエラーを出さないという理由で .Z ファイルは正しい と思わないで下さい。 これは一般的に、標準の .I uncompress が入力をチェックせず、ゴミである出力をしてしまうという事を意味しています。 SCO compress -H 方式 (lzh 圧縮技法) は CRC を含みませんが、 ある程度の一貫性のチェックの余地があります。 .PP .I zip で作られたファイルは、 'deflation' 技法で圧縮された一つのメンバを もつ時のみ gzip で伸長できます。この特徴は tar.zip ファイルを tar.gz ファイルに するのを助けることのみを意図しています。複数のメンバを持った zip ファイルを 取り出す時には .I gunzip ではなく .I unzip を使って下さい。 .PP .I zcat は、 .I gunzip .B \-c と同一です。 (いくつかのシステムでは、 .I zcat は .I compress へのオリジナルのリンクを保存しておくために .I gzcat としてインストールされているかもしれません。) .I zcat は、コマンドラインで指定されたファイルか標準入力からの入力を伸長し、 標準出力へ伸長したデータを出力します。 .I zcat は、 .B "\&.gz" 拡張子であろうとなかろうと、マジックナンバーが正しければファイルを伸長 します。 .PP .I gzip は、 .I zip や PKZIP で使われている Lempel-Ziv アルゴリズムを使っています。 圧縮率は入力の大きさや共通の文字列の分布によります。 一般に、ソースコードや英語のようなテキストは 60\-70% 縮小されます。 また、 LZW ( .IR compress で使われている)、 Huffman coding ( .IR pack で使われている)、 適応性 Huffman coding .RI ( compact ) よりも圧縮率が良いです。 .PP 圧縮されたファイルがオリジナルのファイルよりわずかでも大きいとしても、 圧縮は常に行われます。最悪の伸長は gzip ファイルヘッダの数バイト、 32K ブロック毎に 5 バイトの増加、すなわち伸長率 0.015% です。 使用しているディスクブロックの実際の数はほとんどの場合決して増加しない事に 注意してください。 .I gzip は、圧縮や伸長を行う時ファイルのモード、所有者、タイムスタンプを保存します。 .SH オプション .TP .B \-a --ascii 行末の変換を行います。このオプションは非 Unix 環境でのみ サポートされています。例えばMSDOSでは、圧縮時に CR LF が LF に変換され、 伸長時に LF が CR LF に変換されます。 .TP .B \-c --stdout --to-stdout オリジナルファイルはそのままで、結果を標準出力へ書き出します。 もし、複数のファイルが入力されれば、結果は一続きの独立したものに なります。よりよく圧縮をするためには、圧縮をする前にすべての入力 ファイルを結合するとよいです。 .TP .B \-d --decompress --uncompress 伸長を行います。 .TP .B \-f --force -ファイルが複数のリンクを持っていたり、すでにファイルは存在してとしても、 +ファイルが複数のリンクを持っていたり、すでにファイルが存在していたとしても、 また圧縮されたデータを端末から読み書きしようとしたときでも圧縮や伸長を 強行します。もし入力されたデータが .I gzip で認識出来ない形式でありオプション --stdout が指定された場合、 変更されることなく入力されたデータは標準出力へコピーされます: .I zcat は .I cat として振舞います。もし .B \-f が指定されておらず バックグランドで実行されていない場合には、 .I gzip はファイルを上書きしてよいか確認を求めます。 .TP .B \-h --help ヘルプを表示し、終了します。 .TP .B \-l --list 圧縮されたファイルそれぞれに以下のフィールドを表示する。 compressed size: 圧縮されたファイルの大きさ uncompressed size: 伸長されたファイルの大きさ ratio: 圧縮率 (分からなければ 0.0%) uncompressed_name: 伸長されたファイルの名前 uncompressed size が -1 ならば、ファイルは gzip 形式ではなく .Z ファイル等です。 そのようなファイルの伸長されたファイルの大きさを 知るには、以下のようにして下さい。 zcat file.Z | wc -c --verbose オプションを共に指定すると、以下のフィールドが追加されます。 method: 圧縮技法 crc: 伸長されたファイルの 32-bit CRC date & time: 伸長されたファイルのタイムスタンプ 圧縮技法は今のところ deflate, compress, lzh (SCO compress -H), pack を サポートしています。crc が ffffffff ならば、gzip 形式ではありません。 --name オプションを共に指定すると、表示する伸長されたファイルの名前、日付、時間 は圧縮されたファイルに保存されたものになります。 --verbose オプションを共に指定すると、 全てのファイルのサイズのトータルや圧縮率が 表示されます (ファイルサイズが分からないものがある場合を除きます)。 --quiet オプションを共に指定すると、タイトルやトータルラインは表示されません。 .TP .B \-L --license .I gzip ライセンスを表示し、終了します。 .TP .B \-n --no-name 圧縮する時、デフォルトでオリジナルのファイル名やタイムスタンプを保存しません。 (もしファイル名が縮められるならば、オリジナルのファイル名は常に 保存されます。) 伸長する時、もしオリジナルのファイル名が存在しても 復元しません (圧縮されたファイルの名前から .I gzip サフィックスのみを取り除きます)、もしオリジナルのタイムスタンプが 存在しても復元しません (圧縮されたファイルからコピーします)。この オプションは伸長する時のデフォルトです。 .TP .B \-N --name 圧縮する時、常にオリジナルのファイル名とタイムスタンプを保存します。 これはデフォルトです。伸長する時、もしオリジナルのファイル名やタイム スタンプが存在すれば復元します。これはファイル名の長さに制限のある システムやタイムスタンプがファイル転送後に失われた時に役に立ちます。 .TP .B \-q --quiet すべての警告を抑制します。 .TP .B \-r --recursive ディレクトリ構造を再帰的に進みます。もし、コマンドラインで指定された ファイル名のディレクトリがあれば、 .I gzip はそのディレクトリへ進み、 そのディレクトリで発見した全てのファイルを圧縮します ( .I gunzip の場合はそれらを伸長します)。 .TP .B \-S .suf --suffix .suf \&.gz の代わりに .suf というサフィックスを使います。どのようなサフィックス でも使う事が出来ますが、ファイルを他のシステムに転送する時の混乱を避ける ために、.z や .gz 以外のサフィックスは避けるべきです。サフィックスに ヌルを指定すると、 以下のように gunzip はサフィックスにかかわらずすべてのファイルを 伸長しようとします。 gunzip -S "" * (MSDOS では *.*) gzip の以前のバージョンでは .z サフィックスを使っていました。 これは、 .IR pack "(1)" との衝突を避けるために変更されました。 .TP .B \-t --test テスト。圧縮されたファイルが完全なものかチェックします。 .TP .B \-v --verbose 冗長メッセージを表示します。圧縮/伸長される各ファイル名と圧縮率を 表示します。 .TP .B \-V --version バージョンナンバーやオプションを表示した後、終了します。 .TP .B \-# --fast --best 圧縮の速度を数値 .IR # で調節します。例えば、 .B \-1 や .B \-\-fast は圧縮速度を最も速くし (圧縮率は最低)、 .B \-9 や .B \-\-best は圧縮速度を最も遅くします (圧縮率は最高)。 デフォルトの圧縮レベルは .BR \-6 (つまり 速度より高い圧縮率を重視している)。 .SH 進んだ使用法 複数の圧縮されたファイルは結合する事ができます。この場合、 .I gunzip は同時にすべてのメンバを取り出します。例えば、 gzip -c file1 > foo.gz gzip -c file2 >> foo.gz その後、 gunzip -c foo は cat file1 file2 と同じ事です。.gz ファイルの一つのメンバが壊れた場合、他のメンバは 復元できます (壊れたメンバを取り除けば)。しかし、 同時にすべてのメンバを圧縮する時、 gzip -c file1 file2 > foo.gz と実行するより、以下のように実行するとより圧縮率を上げる事が出来ます。 cat file1 file2 | gzip > foo.gz もし結合されたファイルをより圧縮率を上げるために再圧縮したければ、 以下のように実行して下さい。 gzip -cd old.gz | gzip > new.gz もし圧縮されたファイルがいくつかのメンバを持つのなら、 --list オプションで報告される伸長後の大きさや CRC は最後のメンバのみを 示しています。すべてのメンバの伸長後の大きさが必要なら、以下のように 実行して下さい。 gzip -cd file.gz | wc -c 複数のメンバを持ち、後からあるメンバを抜き取る事ができるような 単一のアーカイブファイルを作りたければ、 tar や zip のようなアーカイバーを使って下さい。 GNU tar は gzip を呼び出す -z オプションをサポートしています。 gzip は tar の代替ではなく tar の補足として設計されています。 .SH 環境変数 環境変数 .B GZIP には、 .I gzip 起動時にコマンドラインに付加するオプションを指定できます。 これらのオプションがまず解釈され、コマンドラインのパラメーター によって上書きされます。例えば、 sh では: GZIP="-8v --name"; export GZIP csh では: setenv GZIP "-8v --name" MSDOS では: set GZIP=-8v --name Vax/VMS では、環境変数の名前は GZIP_OPT です。これはプログラムの 始動のためのシンボルセットとの衝突を避けるためです。 .SH 関連項目 znew(1), zcmp(1), zmore(1), zforce(1), gzexe(1), compress(1) .SH 診断 終了コードは通常 0 です; エラーが起こった場合は 1 を返します。 警告が出た時は 2 を返します。 .PP Usage: gzip [-cdfhlLnNrtvV19] [-S suffix] [file ...] .in +8 無効なオプションがコマンドラインに指定されています。 .in -8 .IR file : not in gzip format .in +8 .I gunzip に指定されたファイルは圧縮されていません。 .in -8 .IR file: Corrupt input. Use zcat to recover some data. .in +8 圧縮されたファイルが壊れています。壊れている部分までのデータを 以下のようにして復元できます。 .in +8 zcat file > recover .in -16 .IR file : compressed with .I xx bits, can only handle .I yy bits .in +8 .I file が、このマシンの伸長プログラムよりも多くの .I bit を処理できるプログラムにより (LZW を使い) 圧縮されています。 ファイルを gzip で再圧縮してください。 圧縮率が良くなりメモリ使用量も少なくなります。 .in -8 .IR file : already has .gz suffix -- no change .in +8 ファイルが既に圧縮されているかもしれません。ファイルをリネームして もう一度試してください。 .in -8 .I file already exists; do you wish to overwrite (y or n)? .in +8 もし出力ファイルを置き換えたければ、"y" と答えてください。そうでなければ "n" と答えてください。 .in -8 gunzip: corrupt input .in +8 SIGSEGV 違反が検出されました。これは通常、入力されたファイルが壊れている事を 意味しています。 .in -8 .I "xx.x%" .in +8 圧縮で保存された入力の割合 ( .BR \-v と .BR \-l にのみ関係あります)。 .in -8 -- not a regular file or directory: ignored .in +8 入力ファイルが通常ファイルやディレクトリでない時 (シンボリックリンク、ソケット、FIFO、デバイスファイル)、それらは 変更されません。 .in -8 -- has .I xx other links: unchanged .in +8 入力ファイルがリンクをもっています; 変更されないままです。より詳しい事は .IR ln "(1)" を参照して下さい。複数のリンクを持つファイルを圧縮するためには .B \-f フラグを使用して下さい。 .in -8 .SH 注意 圧縮されたデータをテープに書く時、一般にブロック境界まで 0 で埋める必要が あります。データを読み、全ブロックを .I gunzip で伸長する時、 .I gunzip は圧縮されたデータの後にゴミがあると検出し、デフォルトでは警告を出力します。 この警告を抑えるには --quiet オプションを使わなければなりません。 このオプションは、以下のように .B GZIP 環境変数にセット出来ます。 sh では: GZIP="-q" tar -xfz --block-compress /dev/rst0 csh では: (setenv GZIP -q; tar -xfz --block-compr /dev/rst0 上記の例では、gzip は GNU tar の -z オプションによって 暗黙的に呼び出されています。 テープで圧縮されたデータを読み書きするのに同じブロックサイズ (tar の -b オプション) が使われて いるか確認して下さい。(この例では tar は GNU Version を使っていると 仮定しています。) .SH バグ サイズが 2GB を越える場合のオプション --list による出力は、正しくないものです。 圧縮ファイルがシークできない媒体上に存在する場合、 オプション --list による出力は、 サイズを -1 としヘッダ内の CRC を 0xffffffffとします。 まれに、オプション --best を付加して圧縮した場合よりも、デフォルトの圧縮 時 (-6) の方が圧縮率が良いことがあります。ファイルに高い冗長性があれば、 .I compress の方が .I gzip より圧縮率がよいです。 diff --git a/ja_JP.eucJP/man/man1/lex.1 b/ja_JP.eucJP/man/man1/lex.1 index 1c857f912d..7469ab35d8 100644 --- a/ja_JP.eucJP/man/man1/lex.1 +++ b/ja_JP.eucJP/man/man1/lex.1 @@ -1,4079 +1,4079 @@ .\" %FreeBSD: src/usr.bin/lex/lex.1,v 1.17 2003/01/01 18:49:00 schweikh Exp % .\" .\" $FreeBSD$ .TH FLEX 1 "April 1995" "Version 2.5" .SH 名称 flex \- 高速な字句解析処理系の生成ツール .SH 書式 .B flex .B [\-bcdfhilnpstvwBFILTV78+? \-C[aefFmr] \-ooutput \-Pprefix \-Sskeleton] .B [\-\-help \-\-version] .I [filename ...] .SH 概説 本マニュアルは、 テキストのパターンマッチングを行うプログラムを生成するツール .I flex を扱います。 本マニュアルはチュートリアルとリファレンス節とを含みます: .nf 解説 ツールの短い概説 簡単な例 入力ファイルのフォーマット パターン flex が使用する拡張した正規表現 入力のマッチ方法 何がマッチするかを決定する規則 アクション パターンがマッチした時に何を行うかを指定する方法 生成されたスキャナ flex が生成するスキャナに関する詳細; 入力元の制御方法 開始条件 スキャナへの文脈の導入と、 "ミニスキャナ" の制御方法 複数の入力バッファ 複数の入力元を扱う方法; ファイルではなく文字列からスキャンする方法 ファイルの終りのルール ファイルの終りにマッチする特別なルール 雑多なマクロ アクションで使用可能なマクロのまとめ ユーザが使用可能な値 アクションで使用可能な値のまとめ Yacc とのインタフェース lex スキャナと yacc パーサとの結合 オプション flex のコマンドラインオプションと、 "%option" ディレクティブ 性能関連 スキャナを可能な限り高速にする方法 C++ スキャナの生成 C++ スキャナクラス生成のための (実験的な) 機能 Lex および POSIX との非互換性 AT&T lex および POSIX lex 標準と flex との違い 診断 flex (もしくは生成したスキャナ) が出力する エラーメッセージで意味が明確でないもの 関連ファイル flex が使用するファイル 欠陥 / バグ flex の既知の問題 関連項目 ツールに関係する他のドキュメント 作者 連絡方法を含みます .fi .SH 解説 .I flex は .I スキャナ を生成するためのツールです。 ここで、スキャナとは、 テキスト内の字句パターンを解析するプログラムです。 .I flex は指定したファイル、もしくはファイル名が与えられなかった場合は 標準入力から、生成するスキャナの記述を読み込みます。 この記述は、 正規表現と C コードのペアの形をとっています。 これは .I ルール と呼ばれます。 .I flex は、出力として C ソースファイルの .B lex.yy.c を生成しますが、その中に .B yylex() ルーチンが定義されます。 このファイルはコンパイルされ、 .B \-ll ライブラリとともにリンクされて、 実行形式となります。 実行形式が走り始めると、 正規表現をマッチさせるために 入力が解析されます。 -マッチするものを見つけると、対応する C コードが実行されます。 +マッチするものを見付けると、対応する C コードが実行されます。 .SH 簡単な例 まず簡単な例から、 .I flex の使い方を見て行きましょう。 次の .I flex の入力は、"username" という文字列に出会うとユーザのログイン名に置き換える スキャナを指定しています: .nf %% username printf( "%s", getlogin() ); .fi デフォルトでは、 .I flex スキャナにマッチしなかったテキストは出力にコピーされますので、 "username" を展開しながら入力を出力にコピーすることが このスキャナの最終的な結果となります。 この入力にはただ一つのルールだけがあります。 "username" は .I パターン であり、"printf" は .I アクション です。 "%%" はルールの始まりの印です。 .PP -別の例を見て見ましょう: +別の例を見てみましょう: .nf %{ int num_lines = 0, num_chars = 0; %} %% \\n ++num_lines; ++num_chars; . ++num_chars; %% main() { yylex(); printf( "# of lines = %d, # of chars = %d\\n", num_lines, num_chars ); } .fi このスキャナは入力の文字数および行数を数えます (数えた最終結果を報告するだけです)。 最初の行は 2 つの大域変数 "num_lines" と "num_chars" を宣言します。 これらの変数は、2 番目の "%%" の後に宣言されている .B yylex() と .B main() のルーチンからアクセス可能です。 ここには 2 つのルールがあります。 1 つ目は改行文字 ("\\n") にマッチし、行数と文字数のカウントを増加させます。 もう 1 つは、改行文字以外の全ての文字 ("." という正規表現で表されています)にマッチします。 .PP 次はもうちょっと複雑な例です: .nf /* scanner for a toy Pascal-like language */ %{ /* need this for the call to atof() below */ #include %} DIGIT [0-9] ID [a-z][a-z0-9]* %% {DIGIT}+ { printf( "An integer: %s (%d)\\n", yytext, atoi( yytext ) ); } {DIGIT}+"."{DIGIT}* { printf( "A float: %s (%g)\\n", yytext, atof( yytext ) ); } if|then|begin|end|procedure|function { printf( "A keyword: %s\\n", yytext ); } {ID} printf( "An identifier: %s\\n", yytext ); "+"|"-"|"*"|"/" printf( "An operator: %s\\n", yytext ); "{"[^}\\n]*"}" /* eat up one-line comments */ [ \\t\\n]+ /* eat up whitespace */ . printf( "Unrecognized character: %s\\n", yytext ); %% main( argc, argv ) int argc; char **argv; { ++argv, --argc; /* skip over program name */ if ( argc > 0 ) yyin = fopen( argv[0], "r" ); else yyin = stdin; yylex(); } .fi これは Pascal のような言語の単純なスキャナの原型です。 異なったタイプの .I トークン を定義し、これを見付けると報告します。 .PP この例の詳細は、以降の節で説明します。 .SH 入力ファイルのフォーマット .I flex の入力ファイルは 3 つの部分からなり、 .B %% だけからなる行により分けられます: .nf 定義 %% ルール %% ユーザコード .fi .I 定義 部分は、スキャナの宣言を単純化する単純な .I 名前 の定義の宣言と、後で説明する .I 開始条件 の宣言とからなります。 .PP 名前の定義は次の形式です: .nf 名前\ 定義 .fi "名前" は語であり、 レターかアンダースコア ('_') から始まって 0 個以上のレター・数字・'_'・'-' (ダッシュ)が続きます。 定義は、名前に続く最初の非空白文字から始まり、行末まで続くものとされます。 定義は後で "{名前}" で参照でき、"(定義)" を展開します。 例えば、 .nf DIGIT [0-9] ID [a-z][a-z0-9]* .fi は、 "DIGIT" が単一の数字にマッチする正規表現であると定義し、 "ID" がレターに 0 個以上のレターか数字が続く正規表現であると定義します。 後で出て来る参照 .nf {DIGIT}+"."{DIGIT}* .fi は .nf ([0-9])+"."([0-9])* .fi と同じであり、1 個以上の数字に '.' が続き、 0 個以上の数字が続くものにマッチします。 .PP .I flex の入力の .I ルール は次の形式の一連のルールからなります: .nf パターン\ \ \ アクション .fi ここで、パターンはインデントされていてはならず、 アクションは同じ行から始まる必要があります。 .PP パターンとアクションの詳細は後の解説を見て下さい。 .PP 最後に、ユーザコードの部分は単純にそのままの形で .B lex.yy.c にコピーされます。 スキャナを呼び出すまたは呼び出される付随ルーチンのために使用されます。 この部分はあっても無くても構いません; 無い場合には、入力ファイル中の 2 番目の .B %% も省略できます。 .PP 定義とルールの部分では、 .I インデントされた テキストと .B %{ と .B %} との間のテキストはそのままの形で出力にコピーされます (この際 %{} は削除されます)。 %{} はインデントされていない行に現れる必要があります。 .PP ルールの部分では、 最初のルールの前に現れるインデントされたもしくは %{} 部分のテキストは、 スキャンルーチンにローカルな変数と、 (宣言の後では)スキャンルーチンに入るたびに実行されるコードとを宣言します。 ルール部分の他のインデントされたもしくは %{} 部分のテキストは 出力にコピーされますが、 意味はちゃんと定義されておらずコンパイル時にエラーとなるかも知れません (この仕様は .I POSIX 互換のためにあります; 他のこのような仕様は以降を見て下さい)。 .PP 定義の部分(ルールの部分ではないです)では、 インデントされていないコメント("/*" から始まる行) は次の "*/" まで そのままの形でコピーされます。 .SH パターン 入力ファイルのパターンは拡張した正規表現を使って記述します。 以下に示します: .nf x 文字 'x' にマッチ。 . 改行を除く全ての文字(バイト)。 [xyz] "文字クラス"; この場合、'x', 'y', 'z' のいずれにも マッチします。 [abj-oZ] 範囲指定を含む "文字クラス"; この場合、'a', 'b' と 'j' から 'o' までの任意のレターと 'Z' にマッチします。 [^A-Z] "否定文字クラス"; クラスに含まれない任意の文字に マッチします。 この場合、'A' から 'Z' までの大文字 「以外の」文字にマッチします。 [^A-Z\\n] 大文字と改行を「除く」全ての文字。 r* 0 もしくはそれ以上の r。r は任意の正規表現。 r+ 1 もしくはそれ以上の r。 r? 0 もしくは 1つの r (「おまけ」の r) r{2,5} 2 つから 5つまでの r。 r{2,} 2 つ以上の r。 r{4} ちょうど 4つ の r。 {名前} "名前" の定義の展開。 (上を参照) "[xyz]\\"foo" 文字列 [xyz]"foo \\X X が 'a', 'b', 'f', 'n', 'r', 't', 'v' のいずれかの とき、ANSI-C での \\X の解釈となります。 それ以外の場合、文字 'X' ('*' のようなオペレータの 意味を打ち消し、その文字自体を指定する際に使います)。 \\123 8進数で 123 と表される文字。 \\x2a 16進数で 2a と表される文字。 (r) r にマッチ; ()は 優先順位を変えるために使用。 (以下を参照) rs 正規表現 r に正規表現 s が続く; 「連結(concatenation)」 と呼びます。 r|s r もしくは s。 r/s 後ろに s が続く時の r。 s にマッチするテキストはこのルールの "最長適合" を判定する 時には含まれますが、アクションが実行される前に 入力に戻されます。 アクションは r にマッチするテキストだけを見ます。 このパターンは "右文脈(trailing context)" と呼ばれます。 (flex が正確にマッチ不能な r/s の組合せは複数あります; "危険な右文脈" については、 以降の、欠陥 / バグ の節の記述を見て下さい。) ^r 行頭にある r。(スキャンの始まりもしくは スキャンされた改行の右です)。 r$ 行末にある r。"r/\\n" と等価(改行の前です)。 "r/\\n" と同じです。 flex の "改行" の表現は flex をコンパイルした C コンパイラが解釈する '\\n' と完全に一致することに 注意して下さい; 特定のシステム DOS では \\r を入力から取り除くか "r$" を表すために明示的に r/\\r\\n を使用する必要があります。 r 開始条件 s における r。(開始条件については以下を 参照)。 r 上に同じ。ただし開始条件は s1, s2, s3 のいずれでもよい。 <*>r 任意の開始条件の r。開始条件は排他的なものでもよい。 <> ファイルの終了。 <> 開始条件が s1 もしくは s2 であるときのファイルの終了。 .fi 文字クラス中では、全ての正規表現のオペレータは、 エスケープ ('\\') および 文字クラスオペレータである '-' と ']' とクラスの先頭の '^' を除き 特別な意味を失うことに注意して下さい。 .PP 上に挙げた正規表現は優先順位によってグループに分けられています。 一番上のグループが最も高い優先度で、 一番下のグループの優先順位が最も低くなっています。 グループ内では同じ優先順位です。例えば、 .nf foo|bar* .fi は .nf (foo)|(ba(r*)) .fi と同じです。なぜなら '*' オペレータは連結より優先度が高く、 連結は選言 ('|') より優先度が高いからです。このパターンは 文字列 "foo" .I もしくは 文字列 "ba" に 0 個以上の r がつづくものの .I どちらにも マッチします。 "foo" もしくは 0 個以上の "bar" にマッチさせるためには次の表現を使用して下さい: .nf foo|(bar)* .fi 0 個以上の "foo" または "bar" にマッチするためには次の表現を使用して下さい: .nf (foo|bar)* .fi .PP 文字もしくは文字範囲に加え、文字クラスも文字クラスの .I 表現 を含みます。 これらの表現は .B [: および .B :] のデリミタに囲まれます (文字クラスの '[' と ']' との間に現れる必要があります; 他の要素が文字クラス中に現れても構いません)。 有効な表現は以下の通りです: .nf [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] .fi これらの表現は対応する標準 C の .B isXXX 関数に適合する全ての文字集合を指示します。例えば、 .B [:alnum:] は .B isalnum() が真を返す文字を指示します - すなわちすべてのアルファベットと数字です。 .B isblank(), が無いシステムでは、flex は .B [:blank:] を空白とタブと定義します。 .PP 例えば以下の表現は全て同じです: .nf [[:alnum:]] [[:alpha:][:digit:]] [[:alpha:]0-9] [a-zA-Z0-9] .fi スキャナが大文字小文字を意識しない場合( .B \-i フラグ指定時) .B [:upper:] と .B [:lower:] は .B [:alpha:] と同じです。 .PP パターンに関する注意点です: .IP - 否定文字クラス、例えば上の "[^A-Z]" は "\\n" (もしくはこれを表すエスケープシーケンス) が明示的に 否定文字クラスに現れている場合 (例えば "[^A-Z\\n]") を除き .I 改行にマッチします。 これは他の正規表現ツールが否定文字クラスを扱う方法とは異なりますが、 不幸なことにこの矛盾は歴史的に確立しています。 改行にマッチするとは、 入力に別のクォートが存在しない場合に [^"]* のようなパターンが 入力全体にマッチすることを意味します。 .IP - ルールは右文脈('/' オペレータもしくは '$' オペレータ) を高々一つしか持てません。 開始条件 '^' と "<>" パターンは パターンの最初になければならず、 '/', '$' 同様に () 内にいれることは出来ません。 ルールの先頭ではない '^' もしくはルールの終りではない '$' は 特別な意味を失い、通常の文字として扱われます。 .IP 以下は無効です: .nf foo/bar$ foobar .fi 前者は "foo/bar\\n" と書けます。 .IP 以下では '$' と '^' とは通常の文字として扱われます: .nf foo|(bar$) foo|^bar .fi "foo" もしくは "改行が続く bar" を指定したい場合は、 次の表現を使用して下さい (特別な '|' の動作は後で説明します): .nf foo | bar$ /* action goes here */ .fi 同じ方法で、foo もしくは 行頭の bar を指定可能です。 .SH 入力のマッチ方法 生成したスキャナを実行すると、 スキャナは入力を見てパターンにマッチする文字列を探します。 1 より多くのマッチを見付けると、最長テキストのマッチを採用します (右文脈(trailing context rule)の後ろの部分も長さに含みますが、 後ろの部分は入力に戻されます)。 同じ長さのマッチを 2 つ以上見付けた場合、 .I flex 入力ファイルで最初に記述されたルールを採用します。 .PP マッチが決定すると、マッチに対応するテキスト( .I トークン と呼ばれます)がグローバル文字ポインタ .B yytext により使用可能となり、長さがグローバル整数 .B yyleng により使用可能となります。 その後、マッチしたパターンに対応する .I アクション が実行され(アクションの詳細な記述は後で行います)、 残りの入力が残りのマッチのためにスキャンされます。 .PP マッチが見付からないと、 .I デフォルトルール -が実行されます: 入力の次の文字がマッチしたと見倣され、 +が実行されます: 入力の次の文字がマッチしたと見なされ、 標準出力にコピーされます。最も簡単で正当な .I flex の入力は以下の通りです: .nf %% .fi これは、入力を単純に出力にコピー(1 度に 1 文字ずつ)するスキャナを生成します。 .PP .B yytext は 2 つの異なった方法により定義されうることに注意して下さい: 文字 .I ポインタ もしくは文字 .I 配列 です。 .I flex がどちらの定義を使用するかは特別なディレクティブ .B %pointer もしくは .B %array を flex の入力の最初の(定義)部分に含めることにより制御できます。 デフォルトは .B %pointer であり、 .B -l lex 互換オプションを使用した場合には例外的に .B yytext は配列になります。 .B %pointer を使用する利点はスキャンが高速であること、 非常に大きなトークンにマッチする時にも (動的メモリを使用し尽くさない限り)バッファオーバフローとならないことです。 欠点は、アクションが .B yytext を修正することが制限されること(次節参照)、 .B unput() 呼び出しが .B yytext の現在の内容を破壊することです。 これは異なる .I lex バージョン間での移植性に関する頭痛の種です。 .PP .B %array の利点は .B yytext の内容を思った通りに変更できること、 .B unput() を呼び出しても .B yytext の内容が破壊されないことです(下記参照)。 その上、既存の .I lex プログラムは .B yytext を外部から次の形式の宣言を使用してアクセスしていることがあります: .nf extern char yytext[]; .fi この定義は .B %pointer 使用時には誤りですが、 .B %array 使用時には正しいです。 .PP .B %array は .B yytext を文字数 .B YYLMAX (デフォルトは十分大きな値)の配列であると定義します。 この大きさは、 .I flex の入力の最初の部分で単純に .B YYLMAX を異なった値に #define することにより変更できます。 上記の通り、 .B %pointer 使用時には yytext は大きなトークンを格納するために動的に大きくなります。 このことは .B %pointer を使用したスキャナは非常に大きなトークン (例えばコメントブロック全体)を格納可能であることを意味しますが、 スキャナが .B yytext の大きさを変えるたびにトークン全体を先頭から再スキャンすることが必要となるため このようなトークンに対するマッチングは遅くなりうることを覚えておいて下さい。 現在、 .B yytext は .B unput() が結果として返すテキストが大きい時には動的には大きくなり .I ません; 実行時エラーとなります。 .PP また、 .B %array は C++ スキャナクラスでは使用できないことに注意して下さい( .B c++ オプションに関しては下記参照)。 .SH アクション ルール中のパターンは対応するアクションを持ちます。 アクションは任意の C の文です。 パターンは最初のエスケープされていない空白文字で終ります; 行の残りがアクションです。 アクションが空である場合、 パターンがマッチした時に入力トークンは単純に捨てられます。 例えば入力から全ての "zap me" を削除するプログラムの仕様を示します: .nf %% "zap me" .fi (入力の他の全ての文字を出力にコピーします。 なぜならデフォルトルールにマッチするからです。) .PP 次は、複数の空白や文字を単一の空白に圧縮し行末の空白を捨てるプログラムです: .nf %% [ \\t]+ putchar( ' ' ); [ \\t]+$ /* ignore this token */ .fi .PP アクションが '{' を含む場合、アクションは対応する '}' まで続き、 複数行に渡る場合もあります。 .I flex は C の文字列およびコメントに関して知っており、 それらの中のブレースを誤解することはありませんが、 アクションが .B %{ で始まることを許し、次の .B %} までのテキストがアクションであるとします (アクション内部の任意個のブレースには関係ありません)。 .PP 垂直バー ('|') のみからなるアクションは "次のルールと同じ" を意味します。説明は以下を見て下さい。 .PP アクションは任意の C コードを含むことが出来ます。 これには、 .B yylex() を呼び出したルーチンに対して値を返す .B return 文も含まれます。 .B yylex() が呼ばれるたび、最後に残ったトークンから処理を再開し、 ファイルの終了もしくは return を実行するまで処理を行います。 .PP アクションは自由に .B yytext を変更できますが、例外は長さを増やすことです (文字を末尾に加えることになり、 これは入力ストリームの後続する文字を上書きします)。 これは .B %array 使用時には当てはまりません(上述); この場合 .B yytext を自由に変更できます。 .PP アクションは自由に .B yyleng を変更できますが、アクションが .B yymore() を使用する時には例外的に変更してはいけません(後述)。 .PP 多くの特別なディレクティブがあり、アクション中に含めることが出来ます: .IP - .B ECHO yytext をスキャナの出力にコピーします。 .IP - .B BEGIN 後ろに開始条件の名前を書くと、スキャナを対応する開始条件に設定します(後述)。 .IP - .B REJECT 入力(もしくは入力の頭)に "2 番目によく(second best)" マッチするルール に進むようにスキャナに指示します。 "入力のマッチ方法" で示したようにルールは選択され、 .B yytext と .B yyleng は適切に設定されます。 選択されるルールは、最初に選択されたルールと同じ長さであるが .I flex の入力ファイルにて後で出て来るもの、もしくは少ない文字数にマッチするものです。 例えば次の例では入力中の語を数え、 "frob" が見付かるたびにルーチン special() を呼びます: .nf int word_count = 0; %% frob special(); REJECT; [^ \\t\\n]+ ++word_count; .fi .B REJECT が無い場合、 入力中の "frob" は語として数えられず、 スキャナは通常通りトークン毎に 1 つのアクションだけを行います。 複数の .B REJECT を使用可能であり、それぞれ現在有効なルールの次に良い選択を見付けます。 例えば次のスキャナは、"abcd" というトークンをスキャンし、 出力に "abcdabcaba" を書きます: .nf %% a | ab | abc | abcd ECHO; REJECT; .|\\n /* eat up any unmatched character */ .fi (前の 3 つのルールは 4 番目のルールのアクションを共有します。 なぜなら特別な '|' アクションが使用されているからです。) .B REJECT はスキャナの性能という点で特にコストのかかる機能です; もしスキャナのアクションの .I いずれか にでも REJECT が使われたなら、スキャナの .I 全ての マッチング速度を低下させるということです。 さらに .B REJECT をオプション .I -Cf や .I -CF と共に用いることは出来ません。 .IP また、他の特別アクションと違い .B REJECT は .I 分岐(branch) であることに注意してください; すなわち REJECT 直後のアクションは 実行 .I されません。 .IP - .B yymore() 次にルールとマッチしたときには、対応するトークンは、 現在の .B yytext の内容と入れ換えるのではなく .B yytext に .I 追加 するようスキャナに指示します。 例えば、入力 "mega-kludge" が与えられると、以下は "mega-mega-kludge" を出力に書きます: .nf %% mega- ECHO; yymore(); kludge ECHO; .fi 最初の "mega-" はマッチし出力にエコーされます。 次に "kludge" がマッチしますが、直前の "mega-" がまだ .B yytext の先頭に残っており、"kludge" の .B ECHO ルールは実際には "mage-kludge" を書きます。 .PP .B yymore() の使用に関し 2 つの注意点があります。 まず、 .B yymore() は現在のトークンの大きさを反映する .I yyleng の値の正確さに依存することであり、 .B yymore() 使用時には .I yyleng を変更してはなりません。 次に、 スキャナのアクションに .B yymore() があると、スキャナのマッチ速度に若干悪影響があります。 .IP - .B yyless(n) 現在のトークンから最初の .I n 文字を除いたものを入力ストリームに戻します。 戻した文字列はスキャナが次のマッチングをとるときに再度スキャンされます。 .B yytext と .B yyleng は適切に調整されます(例えば .B yyleng は .I n となります)。 例えば、入力 "foobar" が与えられると、以下は "foobarbar" を書きます: .nf %% foobar ECHO; yyless(3); [a-z]+ ECHO; .fi 引数 0 を .B yyless に与えると、現在の入力文字列全体が再度スキャンされます。 (例えば .B BEGIN を使用して)次にスキャナが入力する方法を変更していないと、無限ループとなります。 .PP .B yyless はマクロであり、flex 入力ファイルでのみ使用可能であり、 別のソースファイルからは使用不能であることに注意して下さい。 .IP - .B unput(c) 文字 .I c を入力ストリームへ戻します。戻した文字は次にスキャンされる文字になります。 次のアクションは現在のトークンを取り上げ、 括弧内に入れて再スキャンします。 .nf { int i; /* Copy yytext because unput() trashes yytext */ char *yycopy = strdup( yytext ); unput( ')' ); for ( i = yyleng - 1; i >= 0; --i ) unput( yycopy[i] ); unput( '(' ); free( yycopy ); } .fi .B unput() は文字を入力ストリームの .I 先頭 に戻すので、文字列を戻す場合には後ろから前に向かって戻す必要があります。 .PP .B unput() 使用時の重要な潜在的な問題は、 .B %pointer 使用時(デフォルト)に .B unput() を呼び出すと、 右端の文字から開始し 1 文字ずつ左に向かって消費され、 .I yytext の内容が .I 破壊 されることです。 (上記例のように) .B unput() 呼び出し後も .I yytext の内容を保存するためには、始めに別の場所にコピーするか、 スキャナを .B %array を使うように構築することです(入力のマッチ方法参照)。 .PP 最後に、 .B EOF を戻して入力ストリームにファイルの終りをマークするとは 出来ないことに注意して下さい。 .IP - .B input() 次の文字を入力ストリームから読みます。 次の例は C コメントを食べます: .nf %% "/*" { register int c; for ( ; ; ) { while ( (c = input()) != '*' && c != EOF ) ; /* eat up text of comment */ if ( c == '*' ) { while ( (c = input()) == '*' ) ; if ( c == '/' ) break; /* found the end */ } if ( c == EOF ) { error( "EOF in comment" ); break; } } } .fi (スキャナが .B C++ でコンパイルされたときは、このルーチンは .B yyinput() という名称になり、 .B C++ ストリームの .I input と名前が衝突することを避けます。) .IP - .B YY_FLUSH_BUFFER スキャナの内部バッファをフラッシュし、 次にスキャナがトークンをマッチしようとした時 バッファを .B YY_INPUT にてリフィルします(生成されたスキャナで後述)。 このアクションは、 複数の入力バッファにおいて後述する より一般的な .B yy_flush_buffer() 関数の特別なケースです。 .IP - .B yyterminate() アクションの return 文の代わりに使うことが出来ます。 .B yyterminate() はスキャナを終了し、"全て終了" を意味する 0 を呼び出し元関数に返します。 デフォルトでは .B yyterminate() はファイルの終わりに達したときにも呼ばれます。 .B yyterminate() はマクロであり、定義しなおすことができます。 .SH 生成されたスキャナ .I flex の出力は .B lex.yy.c というファイルであり、スキャンルーチン .B yylex() と、トークンのマッチングに使用する複数のテーブルと、 複数の付属ルーチンとマクロからなります。デフォルトでは、 .B yylex() は次のように宣言されます: .nf int yylex() { ... various definitions and the actions in here ... } .fi (環境が関数プロトタイプをサポートしている場合、 "int yylex( void )" となります。) この定義は "YY_DECL" マクロを定義することにより変更できます。 例えば次のように使用することが出来ます: .nf #define YY_DECL float lexscan( a, b ) float a, b; .fi これはスキャンルーチンの名前を .I lexscan とし、浮動小数点数を返すようにし、2 つの浮動小数点数を引数とします。 K&R の非プロトタイプの関数宣言を使用してスキャンルーチンに対して引数を 与える場合、定義をセミコロン(;)で終了する必要があります。 .PP .B yylex() は呼ばれるたび、グローバル入力ファイル .I yyin (デフォルトでは標準入力)からトークンをスキャンします。 ファイルの終りになる(この場合 0 を返します)か、 アクションが .I return 文を実行するまで、実行を続けます。 .PP スキャナがファイルの終りに到達すると、 .I yyin が新たなファイルを指さないか (新たなファイルを指す場合はこのファイルのスキャンを続けます)、 .B yyrestart() が呼ばれない限り、 後続する呼び出しは未定義です。 .B yyrestart() は .B FILE * ポインタ( .B YY_INPUT を設定して .I yyin 以外のソースをスキャンするようにした場合には nil も可です) である引数を 1 つとり、そのファイルからのスキャンのために .I yyin を初期化します。 本質的に、 .I yyin を新しい入力ファイルに割り当てることと .B yyrestar() を使用することとは同じです; 後者は前のバージョンの .I flex との互換性のために使用可能であり、 またスキャンの途中で入力ファイルを変えることが可能です。 引数を .I yyin として呼び出すことにより、現在の入力バッファを捨てることも出来ます; ただし、 .B YY_FLUSH_BUFFER (上述)を使用する方が良いです。 .B yyrestart() は .B INITIAL の開始条件を変更し .I ない ことに注意して下さい (後述の開始条件参照)。 .PP あるアクション中で .I return 文を実行することにより .B yylex() がスキャンを止めた場合、スキャナは再度呼び出し可能であり、 この場合スキャンの残りの部分から再開します。 .PP デフォルトで(効率のため)、スキャナは単純な .I getc() コールではなくブロックリードを行い、 .I yyin から文字を読みます。 入力取得方法は .B YY_INPUT マクロを定義することにより制御できます。 YY_INPUT 呼び出し手順は "YY_INPUT(buf,result,max_size)" です。 このアクションは、 .I buf 文字配列中に最大 .I max_size 文字を用意し、整数変数 .I result 中に読めた文字数もしくは定数 YY_NULL (Unix システムでは 0)を入れて返します。 デフォルトの YY_INPUT はグローバルファイルポインタ "yyin" から読みます。 .PP YY_INPUT のサンプル定義です(入力ファイルの定義部に格納): .nf %{ #define YY_INPUT(buf,result,max_size) \\ { \\ int c = getchar(); \\ result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \\ } %} .fi この定義により、入力処理は 1 度に 1 文字ずつ行うように変更されます。 .PP スキャナが YY_INPUT からファイルの終りを通知された場合、 スキャナは .B yywrap() 関数をチェックします。 .B yywrap() 関数が偽(0)を返す場合、関数は続行中であるとされ、 .I yyin を別の入力ファイルを指すように設定し、スキャンを続行します。 関数が真(非0)を返す場合、スキャナは終了し、呼び出し元に 0 を返します。 どちらの場合も開始条件は変化しないことに注意して下さい; つまり .B INITIAL には戻り .I ません。 .PP 独自の .B yywrap() を設定しない場合、 .B %option noyywrap (この場合スキャナは .B yywrap() が 1 を返したかのように動作します)を使用するか、フラグ .B \-ll を指定してデフォルトのルーチン(常に 1 を返します)を使用しなければなりません。 .PP ファイルではなくメモリ中のバッファからスキャンするための 3 つのルーチンを 使用可能です: .B yy_scan_string(), yy_scan_bytes(), yy_scan_buffer() 。 これらに関する議論は複数の入力バッファの節を参照して下さい。 .PP スキャナは、自己の .B ECHO 出力を .I yyout グローバル(デフォルトでは標準出力であり、 別の .B FILE ポインタに割り当てることで再定義できます)に書きます。 .SH 開始条件 .I flex は、条件的に有効となるルールのための機構を提供します。 パターンのプレフィックスが "" となっているルールは、 スキャナが "sc" という名前の開始条件にいる場合のみ有効です。 例えば、 .nf [^"]* { /* eat up the string body ... */ ... } .fi はスキャナが "STRING" 開始条件にいる時のみ有効であり、 .nf \\. { /* handle an escape ... */ ... } .fi は現在の開始条件が、 "INITIAL", "STRING", "QUOTE" のいずれかの場合のみ有効です。 .PP 開始条件は、入力の定義(先頭)部において、インデントされない行で .B %s もしくは .B %x から始まり名前が続く行において宣言されます。 前者は .I 内包的 開始条件を、 後者は .I 排他的 開始条件を、それぞれ宣言します。 開始条件を有効にするのは .B BEGIN アクションです。 次の .B BEGIN アクションが実行されるまで、与えられた開始条件のルールは有効であり、 他の開始条件のルールは無効です。 開始条件が .I 内包的 な場合、開始条件を持たないルールもまた有効です。 開始条件が .I 排他的 な場合、 開始条件を満たすルール .I だけ が有効です。 同じ排他開始条件に依存するルールの組は、 .I flex 入力中の別のルールとは独立なスキャナを記述します。 そのため、排他開始条件を使用すれば、"ミニスキャナ" (別部分とは文法的に異なる部分(例えばコメント)に対するスキャナ) を簡単に指定できます。 .PP 内包的開始条件と排他的開始条件とがまだ少し曖昧であるなら、 両者の関係を表す例を示して説明します。以下のルールの組: .nf %s example %% foo do_something(); bar something_else(); .fi は .nf %x example %% foo do_something(); bar something_else(); .fi と等価です。 .B が無いと、2 番目の例における .I bar パターンは、開始条件が .B example の場合、有効となりません(すなわちマッチしません)。 .B だけを .I bar につけると、 .B example だけにおいて有効となり、 .B INITIAL では有効となりません。一方、最初の例ではどちらの場合でも有効です。 なぜなら最初の例では .B example 開始条件は .I 内包的 .B (%s) 開始条件だからです。 .PP 特殊な開始条件指定子 .B <*> は全ての開始条件にマッチすることに注意して下さい。 このため、上の例は次のようにも書けます; .nf %x example %% foo do_something(); <*>bar something_else(); .fi .PP デフォルトルール(マッチしなかった文字に対しては .B ECHO です)は開始条件中でも有効です。 これは次のものと等価です: .nf <*>.|\\n ECHO; .fi .PP .B BEGIN(0) は、開始条件の無いルールだけが有効である、最初の状態に戻ります。 この状態は開始条件 "INITIAL" として参照できるため、 .B BEGIN(INITIAL) は .B BEGIN(0) と等価です。 (開始条件名を括る括弧は不要ですが、良いスタイルであるとされています。) .PP .B BEGIN アクションは、ルール部の先頭のインデントされたコード中に現れても良いです。 例えば以下の例では、 .B yylex() が呼ばれグローバル変数 .I enter_special が真の場合には、スキャナは "SPECIAL" 開始条件に入ります: .nf int enter_special; %x SPECIAL %% if ( enter_special ) BEGIN(SPECIAL); blahblahblah ...more rules follow... .fi .PP 開始条件を説明するために、 "123.456" のような文字列を 2 通りの異なった解釈をするスキャナを示します。 デフォルトではこれは、 整数 "123" とドット ('.') と整数 "456" の 3 トークンに数えられます。 しかし、この文字列の前に "expect-floats" の文字列がある場合、 これは単一のトークンであるとされ、浮動小数点数 123.456 とされます: .nf %{ #include %} %s expect %% expect-floats BEGIN(expect); [0-9]+"."[0-9]+ { printf( "found a float, = %f\\n", atof( yytext ) ); } \\n { /* that's the end of the line, so * we need another "expect-number" * before we'll recognize any more * numbers */ BEGIN(INITIAL); } [0-9]+ { printf( "found an integer, = %d\\n", atoi( yytext ) ); } "." printf( "found a dot\\n" ); .fi 次は、C のコメントを理解(して捨てる)一方で、 現在の入力行を数えるスキャナです。 .nf %x comment %% int line_num = 1; "/*" BEGIN(comment); [^*\\n]* /* eat anything that's not a '*' */ "*"+[^*/\\n]* /* eat up '*'s not followed by '/'s */ \\n ++line_num; "*"+"/" BEGIN(INITIAL); .fi このスキャナは各ルールで可能な最大のテキストにマッチしようとする場合、 ちょっとした問題が起こります。 一般的には、高速なスキャナを記述する場合、 各ルールで最大のマッチを得ようとすることが最も成功します。 .PP 開始条件名は実際には整数値であり、格納することが出来ることに注意して下さい。 そのため、上記例は以下のように拡張できます: .nf %x comment foo %% int line_num = 1; int comment_caller; "/*" { comment_caller = INITIAL; BEGIN(comment); } ... "/*" { comment_caller = foo; BEGIN(comment); } [^*\\n]* /* eat anything that's not a '*' */ "*"+[^*/\\n]* /* eat up '*'s not followed by '/'s */ \\n ++line_num; "*"+"/" BEGIN(comment_caller); .fi さらに、現在の開始条件を整数値であるマクロ .B YY_START にてアクセスできます。 例えば、上記の .I comment_caller への代入は次のように記述できます。 .nf comment_caller = YY_START; .fi flex は .B YYSTATE を .B YY_START のエイリアスとして提供します (AT&T の .I lex が使用しています)。 .PP 開始条件は独自の名前空間を持たないことに注意して下さい; %s や %x の宣言における名前宣言の扱いは #define と同じです。 .PP 最後に、排他的開始条件を使用する、 展開されたエスケープシーケンスを含む(長すぎる文字列のチェックは含みません) C スタイルのクォート文字列へのマッチ方法を示します: .nf %x str %% char string_buf[MAX_STR_CONST]; char *string_buf_ptr; \\" string_buf_ptr = string_buf; BEGIN(str); \\" { /* saw closing quote - all done */ BEGIN(INITIAL); *string_buf_ptr = '\\0'; /* return string constant token type and * value to parser */ } \\n { /* error - unterminated string constant */ /* generate error message */ } \\\\[0-7]{1,3} { /* octal escape sequence */ int result; (void) sscanf( yytext + 1, "%o", &result ); if ( result > 0xff ) /* error, constant is out-of-bounds */ *string_buf_ptr++ = result; } \\\\[0-9]+ { /* generate error - bad escape sequence; something * like '\\48' or '\\0777777' */ } \\\\n *string_buf_ptr++ = '\\n'; \\\\t *string_buf_ptr++ = '\\t'; \\\\r *string_buf_ptr++ = '\\r'; \\\\b *string_buf_ptr++ = '\\b'; \\\\f *string_buf_ptr++ = '\\f'; \\\\(.|\\n) *string_buf_ptr++ = yytext[1]; [^\\\\\\n\\"]+ { char *yptr = yytext; while ( *yptr ) *string_buf_ptr++ = *yptr++; } .fi .PP 上記例のように同一の開始条件を持つ全てのルールの前に 開始条件を書かねばならないことが多いです。 flex はこれを簡単かつ綺麗にするため開始条件 .I スコープ を導入しました。 開始条件スコープは次のように始まります: .nf { .fi ここで .I SCs は 1 つ以上の開始条件のリストです。 開始条件スコープ内では、 最初の .I '{' にマッチするまでの .I '}' において、全てのルールは自動的に .I のプレフィックスが付きます。 そのため、例えば .nf { "\\\\n" return '\\n'; "\\\\r" return '\\r'; "\\\\f" return '\\f'; "\\\\0" return '\\0'; } .fi は次のものと等価です: .nf "\\\\n" return '\\n'; "\\\\r" return '\\r'; "\\\\f" return '\\f'; "\\\\0" return '\\0'; .fi 開始条件スコープはネストすることが出来ます。 .PP 開始条件のスタックを制御するために 3 つのルーチンを使用可能です: .TP .B void yy_push_state(int new_state) 現在の開始条件を開始条件スタックの先頭にプッシュし、 .B BEGIN new_state を使用したかのように .I new_state に切り替えます (開始条件名は整数値でもあることを思い出して下さい)。 .TP .B void yy_pop_state() スタックの先頭をポップし、 .B BEGIN を使用してその開始条件に切り替えます。 .TP .B int yy_top_state() スタックの内容を変更せずに、スタックの先頭を返します。 .PP 開始条件スタックは動的に大きくなり、 また組み込み時のサイズ制限はありません。 メモリを使い切ると、プログラム実行は中止されます。 .PP 開始条件スタックを使用するためには、スキャナは .B %option stack ディレクティブをインクルードする必要があります (下記オプションを参照して下さい)。 .SH 複数の入力バッファ スキャナによっては(ファイルの "include" をサポートする等) 複数の入力ストリームを扱う必要があります。 .I flex スキャナでは大きなバッファリングを行うため、 スキャンコンテキストに影響される .B YY_INPUT を単純に書き換えるだけでは次の入力がどこから読まれるのかを制御できません。 .B YY_INPUT が呼ばれるのはスキャナがバッファの終りに到達する時だけですので、 例えば "include" のように入力元を切り替える必要のある文をスキャンした後でも 長時間を費す場合があります。 .PP この様な問題を解決するため、 .I flex は複数の入力バッファを生成して切り替える機構を提供します。 入力バッファは次のように生成されます: .nf YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) .fi これは .I FILE ポインタと size を取り、与えられる file に関連し .I size 文字を保持するに十分なバッファを生成します (疑わしい場合には size には .B YY_BUF_SIZE を使用して下さい)。 これは、別のルーチン(下記参照)に渡すための .B YY_BUFFER_STATE ハンドルを返します。 .B YY_BUFFER_STATE のタイプは .B struct yy_buffer_state 構造体へのポインタであるため、 安全のため YY_BUFFER_STATE 変数を .B ((YY_BUFFER_STATE) 0) と初期化することが出来、 スキャナではなくソースファイルにおいて 入力バッファを正しく宣言するためにこの構造体を参照することが出来ます。 .B yy_create_buffer 呼び出しにおける .I FILE ポインタは .B YY_INPUT から見える .I yyin の値と同じようにだけ使用されることに注意して下さい; .B YY_INPUT を再定義して .I yyin を使わないようにすることにより、 .B yy_create_buffer に対して安全にニル .I FILE ポインタを渡せます。 スキャンするバッファを選択するためには次のようにします: .nf void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) .fi これはスキャナの入力バッファを切り替え、 トークンが .I new_buffer から来るようになります。 新たなファイルをオープンして .I yyin を指すのではなく、スキャンを継続するために yywrap() から .B yy_switch_to_buffer() を使用することがあることに注意して下さい。 また、 .B yy_switch_to_buffer() または .B yywrap() による入力元の切り替えは開始条件を変更し .I ない ことにも注意して下さい。 .nf void yy_delete_buffer( YY_BUFFER_STATE buffer ) .fi はバッファに関連づけられたストレージの返還要求に使用します。( .B buffer はニルでも構いませんがこの場合このルーチンは何もしません。) 現在のバッファの内容をクリアするには次のようにします: .nf void yy_flush_buffer( YY_BUFFER_STATE buffer ) .fi この関数はバッファの内容を捨てるため、 次にスキャナがこのバッファとトークンのマッチを行う場合、 スキャナはまず .B YY_INPUT を使用してこのバッファをフィルします。 .PP .B yy_new_buffer() は .B yy_create_buffer() のエイリアスであり、動的オブジェクトの生成と破壊のために使用する C++ の .I new と .I delete との互換性のために提供しています。 .PP 最後に .B YY_CURRENT_BUFFER マクロは、現在のバッファに対する .B YY_BUFFER_STATE ハンドルを返します。 .PP この機能を使用してインクルードファイルを展開するスキャナの記述例です( .B <> 機能は後述します): .nf /* the "incl" state is used for picking up the name * of an include file */ %x incl %{ #define MAX_INCLUDE_DEPTH 10 YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; int include_stack_ptr = 0; %} %% include BEGIN(incl); [a-z]+ ECHO; [^a-z\\n]*\\n? ECHO; [ \\t]* /* eat the whitespace */ [^ \\t\\n]+ { /* got the include file name */ if ( include_stack_ptr >= MAX_INCLUDE_DEPTH ) { fprintf( stderr, "Includes nested too deeply" ); exit( 1 ); } include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER; yyin = fopen( yytext, "r" ); if ( ! yyin ) error( ... ); yy_switch_to_buffer( yy_create_buffer( yyin, YY_BUF_SIZE ) ); BEGIN(INITIAL); } <> { if ( --include_stack_ptr < 0 ) { yyterminate(); } else { yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( include_stack[include_stack_ptr] ); } } .fi ファイルではなくメモリ上の文字列をスキャンするための 入力バッファを設定するための 3 つのルーチンを使用可能です。 いずれも文字列をスキャンする新しい入力バッファを生成し、対応する .B YY_BUFFER_STATE ハンドル(終了時には .B yy_delete_buffer() にて消去します)を返します。新しいバッファに切り替える時には .B yy_switch_to_buffer() を使用し、次の .B yylex() の呼び出し時にはこの文字列をスキャン開始します。 .TP .B yy_scan_string(const char *str) NUL ターミネートされた文字列をスキャンします。 .TP .B yy_scan_bytes(const char *bytes, int len) .I len バイト (NUL が含まれるかも知れません)を位置 .I bytes からスキャンします。 .PP どちらの関数も文字列もしくはバイト列の .I コピー を生成してからスキャンします。( .B yylex() はスキャンするバッファの内容を変更するため、これが望ましいのです。) コピーを避けるためには次のようにします: .TP .B yy_scan_buffer(char *base, yy_size_t size) バッファ内で .I base から .I size バイトの長さをスキャンします。最後の 2 バイトは .B YY_END_OF_BUFFER_CHAR (ASCII NUL) である .I 必要があります。 これらの最後の 2 バイトはスキャンされません; そのためスキャンの内容は .B base[0] から .B base[size-2] までで両端を含みます。 .IP この様になるように .I base を設定しなかった場合(つまり最後の 2 つの .B YY_END_OF_BUFFER_CHAR バイトを忘れた場合)、 .B yy_scan_buffer() は新しいバッファを生成するのではなくニルポインタを返します。 .IP 型 .B yy_size_t は整数型であり、 バッファの大きさを反映する整数式をこの型にキャストすることが出来ます。 .SH ファイルの終りのルール 特別ルール "<>" は、 ファイルの終了時もしくは yywrap() が非 0 (すなわち処理するファイルが無いことを表す)の時に 行われるべきアクションを表します。 アクションは以下の 4 つのうちのいずれかで終る必要があります。 .IP - .I yyin に新しいファイルを割り当てる(前のバージョンの flex では、 割り当て後に特別なアクション .B YY_NEW_FILE を呼び出す必要がありました; 今では不要です。); .IP - .I return 文を実行する; .IP - 特別な .B yyterminate() アクションを実行する; .IP - .B yy_switch_to_buffer() を使用して新たなバッファに切り替える (上記例で示した通り)。 .PP <> ルールを他のパターンと共に使用してはなりません; 他のパターンは開始条件のリストともにだけ満たされるからです。 満たされない <> ルールが与えられた場合、 <> アクションをまだ持っていない .I 全ての 開始条件に適用されます。 <> ルールを最初の開始条件だけに指定するためには次のようにして下さい。 .nf <> .fi .PP これらのルールは閉じていないコメントを捕まえる場合等に便利です。 例えば: .nf %x quote %% ...other rules for dealing with quotes... <> { error( "unterminated quote" ); yyterminate(); } <> { if ( *++filelist ) yyin = fopen( *filelist, "r" ); else yyterminate(); } .fi .SH 雑多なマクロ マクロ .B YY_USER_ACTION にはマッチルールアクションに先だって常に行うアクションを定義できます。 例えば、yytext を小文字に変換するルーチンを呼ぶように #define 出来ます。 .B YY_USER_ACTION 起動時には、変数 .I yy_act はマッチしたルールの番号を与えます(ルールは 1 番から数えます)。 各ルールがマッチする頻度を知りたい場合を想像して下さい。 以下に仕掛けを示します: .nf #define YY_USER_ACTION ++ctr[yy_act] .fi ここで .I ctr は配列であり、それぞれのルールがマッチした回数を計数します。 マクロ .B YY_NUM_RULES はルールの総数を表すため( .B \-s を使った時でさえデフォルトルールを含みます)、 正しい .I ctr の宣言は次のようになります: .nf int ctr[YY_NUM_RULES]; .fi .PP マクロ .B YY_USER_INIT には最初のスキャンの前に常に行うアクションを再定義できます (スキャナの内部初期化の前に行われます)。 例えばデータ表を読み込んだり、ログファイルをオープンするために使用できます。 .PP マクロ .B yy_set_interactive(is_interactive) は現在のバッファが .I 対話的 -と見倣されているか否かを制御するために使用します。 +と見なされているか否かを制御するために使用します。 対話的なバッファの処理は遅くなりますが、 スキャナの入力元が対話的でありバッファをフィルするのを待つことに起因する 問題を避けるためには指定しなければなりません(以下の .B \-I .B %option interactive フラグに関する議論を参照して下さい)。 マクロ起動時に非 0 を指定するとバッファは対話的になり、 0 を指定すると非対話的になります。 このマクロの使用は .B %option interactive , .B %option always-interactive , .B %option never-interactive に優先します(下記オプションを参照して下さい)。 バッファをスキャンして対話的である(もしくはでない)と判断される前に、 .B yy_set_interactive() を起動して下さい。 .PP マクロ .B yy_set_bol(at_bol) は現在のバッファにおける次のトークンに対するマッチのためのスキャンが 行頭から始まるか否かを制御します。 非 0 のマクロ引数は、'^' が付いたルールを有効にしますが、 0 のマクロ引数は '^' が付いたルールを無効にします。 .PP 現在のバッファからスキャンされた次のトークンが有効な '^' ルールを持つ時、 マクロ .B YY_AT_BOL() は真を返します。 そうでない場合は偽を返します。 .PP 生成されたスキャナでは、全てのアクションは大きな一つの switch 文に 集められ、 .B YY_BREAK で分けられています。 .B YY_BREAK は再定義可能です。デフォルトではそれぞれのルールのアクションを 分けるための単なる "break" です。 .B YY_BREAK を再定義することにより、例えば C++ ユーザが #define YY_BREAK を何もしないように定義し (ただし全てのルールが "break" か "return" で終るように 注意しなければなりません!)、 ルールのアクションが "return" で終ることにより .B YY_BREAK がアクセスできないことに起因する、 到達できない文があるという警告を避けることが出来ます。 .SH ユーザが使用可能な値 この節ではユーザがルールのアクション部分で使用可能な値をまとめます。 .IP - .B char *yytext 現トークンのテキストを保持しています。内容を変更しても構いませんが、 その長さを伸ばしてはいけません(終りに文字を追加してはいけない)。 .IP スキャナの記述の最初の部分に特別な指示である .B %array が書かれているとき、 .B yytext は .B char yytext[YYLMAX] と定義されます。 .B YYLMAX はマクロで、デフォルトの値 (多くの場合8KB) を変更したい場合には 最初の部分で再定義可能です。 .B %array を使うといくらか遅いスキャナになりますが、 .B yytext の値は .I input() と .I unput() の呼び出しでも破壊されなくなります。 .B yytext が文字ポインタである場合、 これらの関数呼び出しは .B yytext を破壊する可能性があります。 .B %array と対称な指定 .B %pointer がデフォルトです。 .IP C++ のスキャナクラスを生成する (オプション .B \-+ ) ときには .B %array は使えません。 .IP - .B int yyleng 現トークンの長さを保持しています。 .IP - .B FILE *yyin はデフォルトで .I flex が読むファイルです。再定義することは可能ですが、スキャンを 始める前か EOF に到達した後でのみ再定義は意味を持ちます。 スキャンの途中で変更すると予想外の結果をもたらします。 というのも .I flex は入力をバッファリングしているからです; そのような場合には、直接再定義せず .B yyrestart() を使って下さい。 ファイルの終わりでスキャンが終了した場合には .I yyin を新しい入力ファイルに割り当て、 再びスキャナを呼び出してスキャンを続けることが出来ます。 .IP - .B void yyrestart( FILE *new_file ) を呼ぶことで .I yyin が新しい入力ファイルを指すように出来ます。新しいファイルへの変更は すぐに行われます (それまでにバッファに読み込まれていた入力は失われます)。 .I yyin を引数として .B yyrestart() を呼ぶと、現在の入力バッファを捨てて同じ入力ファイルを スキャンし続けることに注意して下さい。 .IP - .B FILE *yyout は .B ECHO アクションが行われる対象のファイルです。 ユーザが再割当することが出来ます。 .IP - .B YY_CURRENT_BUFFER カレントバッファの .B YY_BUFFER_STATE ハンドルを返します。 .IP - .B YY_START 現在の開始条件に対応する整数値を返します。 続いてこの値を .B BEGIN と共に使うことで、スキャナをその開始条件へ戻すことが出来ます。 .SH YACC とのインタフェース .I flex の主な使用方法の一つは、 .I yacc パーサジェネレータと共に使用することです。 .I yacc パーサは .B yylex() と言う名前のルーチンを呼び、次の入力トークンを見付けるものとしています。 このルーチンは、次のトークンの型を返し、 関連する値をグローバルの .B yylval に格納するものとされています。 .I flex を .I yacc と共に使うには、 .I yacc に .B \-d オプションを指定して、 .I yacc の入力に現れる全ての .B %tokens の定義を含む .B y.tab.h ファイルを生成させます。 このファイルは .I flex スキャナにインクルードされます。 例えばトークンの一つが "TOK_NUMBER" である場合、 スキャナの一部分は次のようになっています: .nf %{ #include "y.tab.h" %} %% [0-9]+ yylval = atoi( yytext ); return TOK_NUMBER; .fi .SH オプション .I flex には以下のようなオプションがあります: .TP .B \-b バックアップ情報を .I lex.backup に出力します。 このファイルには、スキャナのバックアップ(backing-up)を必要とする状態と それに対応する入力文字の一覧がリストされます。 ルールを追加することでバックアップ状態を取り除くこと ができます。バックアップ状態が .I 全て 取り除かれ、 .B \-Cf または .B \-CF を指定すると、生成されたスキャナの実行速度が向上します( .B \-p フラグを見て下さい)。 スキャナをぎりぎりまで最適化しようとしてるユーザのみが このオプションに関係あります。 (後述の性能関連の節を見て下さい。) .TP .B \-c 何もしません。POSIX 互換のために用意されています。 .TP .B \-d 生成されたスキャナが .I デバッグ モードで実行されます。 .B yy_flex_debug が非 0 の場合(デフォルト)、 パターンが認識されるたびに、スキャナは次のようなメッセージを .I 標準エラー出力 へ出力します。 .nf --accepting rule at line 53 ("the matched text") .fi 行番号はスキャナを定義しているファイル (flexに与えられたファイル) でのルールの位置です。 スキャナがバックアップしたとき、デフォルトルールを受け入れたとき、 入力バッファの最後に到達したとき (あるいは、NULに到達したとき; スキャナには、この二つの区別はつきません)、ファイルの最後に到達した ときにもメッセージが出力されます。 .TP .B \-f .I 高速なスキャナ を指定します。 テーブル圧縮は行われず、標準入出力をバイパスします。 その結果生成されるスキャナは大きくなりますが、高速なものになります。 このオプションは .B \-Cfr と同等です (以下を参照)。 .TP .B \-h .I flex のオプションの要約からなる "ヘルプ" を .I 標準出力 に書き出し終了します。 .B \-? と .B \-\-help とは .B \-h と同じです。 .TP .B \-i .I 大文字小文字を区別しない スキャナを生成します。 .I flex の入力パターンに与えられる文字が大文字であるか小文字であるかは区別されず、 スキャナに入力される文字列は大文字小文字に関係なくマッチします。 マッチしたテキスト .I yytext では入力時の大文字小文字が保存されます (大文字を小文字に変換したりしません)。 .TP .B \-l AT&T の .I lex の実装に対して最大限の互換性を持たせます。これは .I 完全な 互換性を意味しません。 このオプションを使用すると性能に大きな影響があります。 このオプションは、 .B \-+, \-f, \-F, \-Cf, \-CF と同時に使用できません。詳しくは、 後述の "Lex および POSIX との非互換性" の節を御覧下さい。 またこのオプションを使用すると、 .B YY_FLEX_LEX_COMPAT が生成されたスキャナの名前に #define されます。 .TP .B \-n 何もしません。POSIX 互換のためにだけ用意されたオプションです。 .TP .B \-p 性能情報を標準エラー出力に出力します。 .I flex 入力ファイルの記述のうち、 生成されるスキャナの性能低下の深刻な原因となる部分について、 コメントされます。 オプションを2回指定すると、より細かな性能低下についても コメントが出力されます。 .IP .B REJECT ・ .B %option yylineno ・可変長右文脈(欠陥/バグの節で後述)は多大なる性能への悪影響があります; .I yymore() の使用・ .B ^ オペレータ・ .B \-I フラグは小さな性能の悪影響があります。 .TP .B \-s .I デフォルトルール (マッチしないスキャナの入力を .I 標準出力 に出力する) が抑制されます。ルールにマッチしない入力が表れたとき、スキャナは エラーで異常終了します。 スキャナのルールの組に抜けが無いかを確認する場合に有効です。 .TP .B \-t .B lex.yy.c ではなく、標準出力にスキャナを書き出します。 .TP .B \-v 生成するスキャナの特徴の要約を .I 標準エラー出力 に出力するように .I flex に指示します。 ほとんどの特徴は通常の .I flex ユーザには意味がありませんが、最初の行は .I flex のバージョンを表示し( .B \-V で表示されるもと同じです)、次の行はデフォルトを含むスキャナ生成時のフラグです。 .TP .B \-w 警告メッセージを抑制します。 .TP .B \-B .I 対話的 なスキャナ (以下の .B \-I の項を参照) ではなく .I バッチ的 なスキャナを生成するよう .I flex に指示します。 通常 .B \-B を使用するのは、スキャナを対話的に使用しないことが .I 分かっている 時であり、 .I 少しでも 性能を追求したい時です。 より大きい性能を追求する場合には、 .B \-Cf もしくは .B \-CF オプションを使用すべきです(後述)。 .B \-B を自動的に設定します。 .TP .B \-F .ul 高速な スキャナテーブルの表現を使う(標準入出力はバイパスする)ことを指定します。 この表現は、完全テーブル表現 .B (-f) とほぼ同じぐらい高速で、 ある種のパターンに対してはかなり小さく (ある種に対しては大きく) なります。 通常、次のように、パターンの組が "keywords" とその対応 および "identifier" ルールからなる場合: .nf "case" return TOK_CASE; "switch" return TOK_SWITCH; ... "default" return TOK_DEFAULT; [a-z]+ return TOK_ID; .fi この場合、完全テーブル表現を使用する方が良いです。 もし "identifier" ルールからのみ表現され、 キーワードを検知するためにハッシュ表等を使用する場合は、 .B -F を使用する方が良いです。 .IP このオプションは .B \-CFr と等価です (以下を参照)。 これは .B \-+ オプションとは同時に指定できません。 .TP .B \-I .I flex に .I 対話的 なスキャナを生成するように指示します。 対話的なスキャナは、 先読みすることによりマッチするトークンが完全に決まる場合のみ先読みします。 現在のトークンが既に明らかな場合でも常に先読みする方法は、 必要時のみ先読みする方法より少し速いです。 しかし、常に先読みする方法では対話性能に著しく悪影響があります; 例えばユーザが改行を入力した場合、 .I 別の トークンを入力するまでそれは改行として認識されません。 大概の場合、次の行全体を入力することになります。 .IP .I flex のスキャナのデフォルトは .I 対話的 であり、例外は .B \-Cf や .B \-CF といったテーブル圧縮オプション(後述)使用時です。 高性能追求時にはこれらのオプションを使用しているべきですので、 これらのオプションを使用していない場合には、 .I flex は実行時性能を少し犠牲にして直観的な対話的な振舞いを取っているものとします。 .B \-I オプションを .B \-Cf や .B \-CF と共に .I 使用できない ことにも注意して下さい。 実際はこのオプションは不要です; 許される場合、デフォルトで有効になっています。 .IP .B isatty() がスキャナの入力に対して偽を返す場合、 .B \-I が指定されていた場合でも、flex はバッチモードへ戻ります。 なにがあっても対話モードを強制するには、 .B %option always-interactive (後述のオプションを参照) を使用します。 .IP スキャナを対話的で .I 無い ように強制するには .B \-B (先述)を使用します。 .TP .B \-L .I flex に .B #line ディレクティブを .B lex.yy.c 中に生成しないように指示します。 デフォルトではこの #line ディレクティブを生成するので、 アクションにおけるエラーメッセージは、オリジナルの .I flex 入力ファイル( エラーが入力ファイルのコードに起因する場合)もしくは ファイル .B lex.yy.c ( .I flex の誤り -- 以下の電子メールアドレスに報告して下さい) における正しい位置を与えます。 .TP .B \-T .I flex を .I トレース モードで実行します。 入力の形式とその結果として出力される非決定性/決定性有限 オートマトンに関して .I 標準エラー出力 に多量のメッセージを出力します。 このオプションは主に .I flex をメンテナンスするために使われます。 .TP .B \-V バージョン番号を .I 標準出力 に出力して終了します。 .B \-\-version は .B \-V と同じです。 .TP .B \-7 7 ビットのスキャナを生成します。 すなわち、入力に 7 ビットの文字のみを使用することを意味します。 .B \-7 を指定する利点は、 .B \-8 オプション(後述)を指定して生成するテーブルの半分まで小さくなりうることです。 欠点は、入力に 8 ビット文字が含まれている時に、 スキャナがハングもしくはクラッシュすることです。 .IP しかしながら、 .B \-Cf や .B \-CF といったテーブル圧縮オプション使用時にはテーブル圧縮の効果は少なく、 移植性が著しく低下することに注意して下さい。 .I flex のデフォルトの動作では、 .B \-Cf や .B \-CF, を指定しない限り 8 ビットスキャナを生成します。 指定時には、 あなたのサイトが常に 8 ビットスキャナを生成するように (USA 以外のサイトでは良くあります)していない場合には、 7 ビットスキャナを生成します。 flex が 7 ビットもしくは 8 ビットのいずれのスキャナを生成するのかを 知りたい場合には、上述の .B \-v の出力のフラグの要約を調べて下さい。 .IP .B \-Cfe もしくは .B \-CFe (これらのテーブル圧縮オプションおよび等価クラスは後述) を使用しても、flex はデフォルトで 8 ビットスキャナを生成することに 注意して下さい。 なぜなら、完全な 8 ビットテーブルは 7 ビットテーブルと比べても たいして高価にはならないからです。 .TP .B \-8 8 ビットのスキャナを生成するように .I flex に指示します。すなわち 8 ビット文字を解釈します。 圧縮オプション .B \-Cf と .B \-CF 使用時にのみ必要です。 なぜなら flex はデフォルトでは 8 ビットスキャナを生成するからです。 .IP flex のデフォルト動作と 7 ビットおよび 8 ビットスキャナの トレードオフに関しては、上記 .B \-7 の議論を見て下さい。 .TP .B \-+ C++ のスキャナクラスを生成します。 詳しくは C++ スキャナの生成で後述します。 .TP .B \-C[aefFmr] テーブル圧縮の程度と、 より一般的には小さいスキャナと高速なスキャナとのトレードオフを指定します。 .IP .B \-Ca ("アライン") 生成されるスキャナのテーブルは、 メモリアクセスおよび計算のためにアラインされるため、より大きなものになります。 RISC アーキテクチャではロングワードのフェッチおよび操作は ショートワードといったより小さな大きさのものに対するものより効率的です。 場合によってはスキャナのテーブルサイズが通常の 2倍になることもあります。 .IP .B \-Ce .I 等価クラス (同一の字句属性を持つ文字セット)を構築します (例えば、 .I flex 入力中に数字が現れるのが文字クラス "[0-9]" のみの場合、 数字 '0', '1', ..., '9' は全て同じ等価クラスになります)。 多くの場合、等価クラスを用いることで最終的なテーブル/ オブジェクトファイルのサイズを劇的(平均して 1/2-1/5)に減らすことが出来ます。 また、その際の性能コストは非常に低く抑えられます ( 1文字スキャンするごとに 1回の配列検索を行うだけです)。 .IP .B \-Cf .I 完全(full) スキャナテーブルを生成することを指示します - .I flex は、別の状態に関する類似した遷移関数をうまく利用するという、 テーブル圧縮手法を用いません。 .IP .B \-CF 別の高速スキャナ表現( .B \-F フラグにて記述)を用いることを指定します。 このオプションは .B \-+ と同時に使用できません。 .IP .B \-Cm .I flex に .I メタ等価クラス を構築するよう指示します。 メタ等価クラスは一緒に使われることの多い等価クラス (等価クラスが使われていないときには文字群) の集合です。 圧縮テーブルを使っているとき、 メタ等価クラスは多くの場合にかなりの効果的をもたらしますが、 やや性能に影響します (1-2 回の条件テストと 1 回の配列検索がスキャンした文字ごとに行われます)。 .IP .B \-Cr 生成されたスキャナは入力に対しては標準入出力ライブラリ(標準入出力)を .I バイパス します。 スキャナは、 .B fread() や .B getc() ではなく、 .B read() システムコールを使用します。 性能改善結果はシステムに依存します。 オプション .B \-Cf もしくは .B \-CF を使用していない場合には、 一般にこのオプションは性能をあまり改善しません。 .B \-Cr を指定すると、例えばスキャナを設定する前に標準入出力を使用して .I yyin を読み取る等した場合奇妙な動作となり得ます (標準入出力の入力バッファに以前読み込んだものを、スキャナは読めません)。 .IP .B \-Cr は .B YY_INPUT を定義した場合意味がありません (前述の生成されたスキャナを参照)。 スキャナの呼出に先だって標準入力を使って .I yyin から読みだしているときには、予想外の振る舞いをすることがあります。 .IP .B \-C のみを指定したときには、スキャナはテーブル圧縮は行いますが、 等価クラスもメタ等価クラスも使いません。 .IP オプション .B \-Cf と .B \-CF はオプション .B \-Cm を同時に指定しても意味をなしません - なぜなら、テーブル圧縮が行われないときメタ等価クラス は現れないからです。 それ以外のオプションは自由に組み合わせることが出来ます。 .IP デフォルトの設定は .B \-Cem です。このとき .I flex は等価クラスとメタ等価クラスを生成します。 この設定は最も高いテーブル圧縮を行います。 テーブルサイズの大きさと実行の高速性はトレードオフの関係にあり、 一般に .nf 遅いが 小さい -Cem -Cm -Ce -C -C{f,F}e -C{f,F} -C{f,F}a 速いが 大きい .fi となります。 小さいテーブルのスキャナは通常生成もコンパイルも高速であるため、 通常の開発時は最大の圧縮を行うでしょう。 .IP 製品のスキャナでは、 .B \-Cfe が速度と大きさの良いバランスです。 .TP .B \-ooutput .B lex.yy.c ではなくファイル .B output にスキャナを書くように flex に指示します。 .B \-o と .B \-t オプションを組み合わせると、 スキャナは .I 標準出力 に書かれますが、 .B #line ディレクティブ( .B \\-L にて上述)はファイル .B output を参照します。 .TP .B \-Pprefix .I flex の使うデフォルトのプレフィックス .I "yy" の代わりに .I prefix を使います。これはグローバル変数とファイル名に影響します。 例えば .B \-Pfoo とすると、 .B yytext の名前は .B footext となります。 またデフォルトの出力ファイル名を .B lex.yy.c から .B lex.foo.c に変えます。 影響を受ける名前の一覧です: .nf yy_create_buffer yy_delete_buffer yy_flex_debug yy_init_buffer yy_flush_buffer yy_load_buffer_state yy_switch_to_buffer yyin yyleng yylex yylineno yyout yyrestart yytext yywrap .fi (C++ スキャナ使用時には .B yywrap と .B yyFlexLexer だけが影響を受けます。) スキャナの中では、グローバル変数および関数を どちらの名前ででも参照できます; 外部的には修正した名前のみ持ちます。 .IP このオプションを使用することにより、複数の .I flex プログラムを同一の実行形式に容易にリンクすることが出来ます。 しかし、このオプションは .B yywrap() の名前をも変えますので、 独自の(適切に名前を付けた)ルーチンをスキャナのために用意するか、 .B %option noyywrap を使用して .B \-ll とリンクする .I 必要があります。 どれもデフォルトでは提供されません。 .TP .B \-Sskeleton_file .I flex がスキャナを構築するのに使うデフォルトの スケルトンファイルに優先します。 .I flex のメンテナンスや開発をする場合以外、このオプションは必要ありません。 .PP .I flex は、flex のコマンドラインではなく、 スキャナ仕様記述中からオプションを制御する機構を提供します。 これはスキャナの最初の部分に .B %option ディレクティブを含めることで実現できます。 単一の .B %option ディレクティブにおいて複数のオプションを指定でき、 また複数のディレクティブを flex 入力ファイルの最初の部分に置くことが出来ます。 .PP ほとんどのオプションが単純な名前であり、 オプションとして前に "no" という語(空白をはさみません)を付けて 意味を反転できます。 数値は flex のフラグやその反転と等価です。 .nf 7bit -7 オプション 8bit -8 オプション align -Ca オプション backup -b オプション batch -B オプション c++ -+ オプション caseful または case-sensitive -i オプションの逆(デフォルト) case-insensitive または caseless -i オプション debug -d オプション default -s オプションの逆 ecs -Ce オプション fast -F オプション full -f オプション interactive -I オプション lex-compat -l オプション meta-ecs -Cm オプション perf-report -p オプション read -Cr オプション stdout -t オプション verbose -v オプション warn -w オプションの逆 (-w オプションには "%option nowarn" を使用して下さい) array "%array" と等価 pointer "%pointer" と等価(デフォルト) .fi .B %option には、他では利用できない機能を提供するものもあります: .TP .B always-interactive 入力を常に "対話的" に扱うスキャナを生成するように flex に指示します。 通常、新たな入力ファイル毎にスキャナは .B isatty() を呼び出し、スキャナの入力元が対話的であり 1 度に 1 文字ずつ読むべきか どうか判定しようとします。 一方このオプションを使用するとこの様な呼び出しは行いません。 .TP .B main スキャナに対し、 .B yylex() を呼び出すだけのデフォルトの .B main() プログラムを提供するように指示します。 このオプションは .B noyywrap (後述)も暗黙的に指示します。 .TP .B never-interactive 入力を "対話的" とはしないスキャナを生成するように flex に指示します (これもまた .B isatty() を呼び出しません)。 これは .B always-interactive の逆です。 .TP .B stack 開始条件スタックの使用を有効にします(前述の開始条件を参照)。 .TP .B stdinit 設定されている場合 (すなわち .B %option stdinit) .I yyin および .I yyout を、 デフォルトの .I nil ではなく、 .I 標準入力 と .I 標準出力 に設定します。 既存の .I lex プログラムには、 ANSI C 互換ではないものの、この動作に依存しているものがあります。 ANSI C では .I 標準入力 と .I 標準出力 がコンパイル時の定数である必要はありません。 .TP .B yylineno 入力から読み取った現在の行番号をグローバル変数 .B yylineno に保持するスキャナを生成するように、 .I flex に指示します。 このオプションは .B %option lex-compat から暗黙的に指定されます。 .TP .B yywrap セットされていない場合 (すなわち .B %option noyywrap) 、スキャナはファイルの終りに際し .B yywrap() を呼ばず単にスキャンすべきファイルがもう無いものとするようになります( ユーザが .I yyin を新しいファイルを指すようにし、再度 .B yylex() を呼び出すまでです)。 .PP .I flex はルールアクションをスキャンし、 .B REJECT と .B yymore() の機能が使われているかどうかを調べます。 .B reject と .B yymore のオプションを使用すると、 オプションで指定した通りにこの判定に優先します。 オプションの指定は、セットして機能を使用していることを示す(例えば .B %option reject) 、もしくはアンセットして機能を使用していないことを示す(例えば .B %option noyymore) ものとします。 .PP 次のオプションは文字列の値を取り、'=' で区切ります: .nf %option outfile="ABC" .fi これは .B -oABC と同じであり、 .nf %option prefix="XYZ" .fi は .B -PXYZ と同じです。 最後に、 .nf %option yyclass="foo" .fi は C++ スキャナ生成時のみ有効( .B \-+ オプション)です。これは .I flex に対して、 .B foo が .B yyFlexLexer のサブクラスであることを知らせますので、 .I flex はアクションを .B yyFlexLexer::yylex() ではなく .B foo::yylex() のメンバ関数とします。 また、( .B yyFlexLexer::LexerError() を起動することにより)呼び出すと実行時エラーを除去する .B yyFlexLexer::yylex() メンバ関数を生成します。 詳細は後述の C++ スキャナの生成を見て下さい。 .PP 生成されたスキャナから不要なルーチンを除きたい lint 純正主義者のために 多くのオプションが用意されています。 以下をアンセットすると(例えば .B %option nounput )、対応するルーチンは生成されるスキャナから除かれます: .nf input, unput yy_push_state, yy_pop_state, yy_top_state yy_scan_buffer, yy_scan_bytes, yy_scan_string .fi ( .B yy_push_state() 等は .B %option stack を使用しない場合には現れません)。 .SH 性能関連 .I flex の主なデザインゴールは高性能なスキャナを生成することです。 多くのルールセットを良く扱うことで最適化されます。 既に概説した .B \-C オプション使用によるテーブル圧縮に起因する速度への影響の他に、 性能を悪化させる多くのオプション/アクションがあります。 それらを高価なものから安価なものへと並べます: .nf REJECT %option yylineno 自由長の右文脈(trailing context) バックアップが必要なパターンの組 %array %option interactive %option always-interactive '^' 行頭オペレータ yymore() .fi 最初の 3 つは非常に高価であり、最後の 2 つは非常に安価です。 .B unput() は潜在的に非常に大きな仕事をするルーチン呼び出しとして実装されているのに対し、 .B yyless() は非常に安価なマクロです; ですからスキャンした余分なテキストを戻すだけの場合には .B yyless() を使って下さい。 .PP 性能が重要な場合には、出来うる限りの努力でもって .B REJECT を避けて下さい。 これは特に高価なオプションです。 .PP バックアップを取り除くと、乱雑になり、 ひどく苦労して複雑なスキャナを作ることになります。 実際的には .B \-b フラグを指定して .I lex.backup ファイルを生成することから始めます。例えば、入力 .nf %% foo return TOK_KEYWORD; foobar return TOK_KEYWORD; .fi に対しては、ファイルは次のようになります: .nf State #6 is non-accepting - associated rule line numbers: 2 3 out-transitions: [ o ] jam-transitions: EOF [ \\001-n p-\\177 ] State #8 is non-accepting - associated rule line numbers: 3 out-transitions: [ a ] jam-transitions: EOF [ \\001-` b-\\177 ] State #9 is non-accepting - associated rule line numbers: 3 out-transitions: [ r ] jam-transitions: EOF [ \\001-q s-\\177 ] Compressed tables always back up. .fi 最初の数行は、 \&'o' に遷移できるが他の文字には遷移できない状態があり、 その状態では現在スキャンされたテキストは他のルールにはマッチしないことを 表します。 この状態が発生したのは、 入力ファイルの行 2, 3 のルールにマッチしようとした時です。 スキャナがこの様な状態にあり 'o' 以外の文字を読んだ場合には、 マッチするルールを探すためのバックアップが必要となります。 少し考えれば、これは "fo" を見た時にある状態に違いないことが分かるでしょう。 この様な時、'o' 以外のものが現れると、 スキャナは、単に 'f' にマッチする(デフォルトルール)ところまで 戻り(バックアップし)ます。 .PP 状態 #8 に関係するコメントは、 "foob" がスキャンされた時に問題があることを表しています。 実際、'a' 以外の文字に出会うと、スキャナは "foo" を受理するところまで戻ります。 同様に状態 #9 に関係するコメントは、 "fooba" がスキャンされ 'r' が続かない場合に関係します。 .PP 最後のコメントが通知するのは、 .B \-Cf や .B \-CF を使っているのでなければ バックアップを取り除こうと努力することは無意味であることです。 なぜなら、圧縮されたスキャナに対してそのようなことをしても、 性能上の利益は無いからです。 .PP バックアップを取り除くためには "エラー" ルールを追加します: .nf %% foo return TOK_KEYWORD; foobar return TOK_KEYWORD; fooba | foob | fo { /* false alarm, not really a keyword */ return TOK_ID; } .fi .PP キーワードのリストからバックアップを取り除くには、"全てを捕まえる" ルールを使用することが出来ます: .nf %% foo return TOK_KEYWORD; foobar return TOK_KEYWORD; [a-z]+ return TOK_ID; .fi 通常、適切な時にはこれは一番良い解決策です。 .PP バックアップメッセージはカスケードすることが多いです。 複雑なルールの組では、数百ものメッセージを得るのは普通のことです。 しかし、これを解析すれば、バックアップを除去するためには 大抵の場合数ダースのルールにだけ関係あることが分かるでしょう (しかし、間違えることが多く、誤ったルールが偶然有効なトークンにマッチし得ます。 将来の .I flex の機能では、 自動的にバックアップを除去するルールを追加するようになるかも知れません)。 .PP バックアップを除去することにより利益があるのは、 .I 全ての バックアップを除去した時だけということを覚えておくことは重要です。 たった一つを残しても何も得ることが出来ません。 .PP .I 可変長の 右文脈 (左部分と右部分のいずれかもしくは両方が可変長)は .B REJECT とほぼ同じだけの(すなわち相当の)性能劣化となります。 そのため次のようなルール: .nf %% mouse|rat/(cat|dog) run(); .fi は次のように書くか: .nf %% mouse/cat|dog run(); rat/cat|dog run(); .fi 次のように書いた方が良いです: .nf %% mouse|rat/cat run(); mouse|rat/dog run(); .fi 特別な '|' アクションは助けにはなり .I ません し、かえって状況を悪くします (後述の欠陥/バグを参照)。 .LP スキャナの性能を向上させるための余地(実現は最も容易)は、 マッチするトークンが長ければスキャナが高速になることにあります。 長いトークンではほとんどの入力処理は(短い)内部ループで処理され、 アクションのためにスキャナ環境を設定する追加の仕事(例えば .B yytext) をほとんどしないからです。 C コメントのスキャナを思い出しましょう: .nf %x comment %% int line_num = 1; "/*" BEGIN(comment); [^*\\n]* "*"+[^*/\\n]* \\n ++line_num; "*"+"/" BEGIN(INITIAL); .fi 次のように書くと高速になります: .nf %x comment %% int line_num = 1; "/*" BEGIN(comment); [^*\\n]* [^*\\n]*\\n ++line_num; "*"+[^*/\\n]* "*"+[^*/\\n]*\\n ++line_num; "*"+"/" BEGIN(INITIAL); .fi 今度は、改行毎に別のアクションの処理を行うのではなく、 改行認識はルール間で "分散" され、 可能な限り長いテキストにマッチするようになっています。 ルールの .I 追加 はスキャナを遅く .I しません! スキャナの速度は、ルール数とも、 オペレータ '*' や '|' といったものに基づくルールの複雑さ (この節の始めで扱いました)とも独立です。 .\" 括弧内自信無しです .\" Apr 29 1997, horikawa@jp.freebsd.org .PP 最後の高速化の例です: 1 行に 1 つずつであり別の文字は付かないような、 識別子とキーワードを全てファイルからスキャンすることを考えます。 最初は次のようになるでしょう: .nf %% asm | auto | break | ... etc ... volatile | while /* it's a keyword */ .|\\n /* it's not a keyword */ .fi 後戻りを避けるために全てを捕まえるルールを導入します: .nf %% asm | auto | break | ... etc ... volatile | while /* it's a keyword */ [a-z]+ | .|\\n /* it's not a keyword */ .fi 1 行に正確に 1 語だけあることが保証されている場合、 改行の認識を別のトークンと併せることで、 マッチの総数を半分に減らすことが出来ます: .nf %% asm\\n | auto\\n | break\\n | ... etc ... volatile\\n | while\\n /* it's a keyword */ [a-z]+\\n | .|\\n /* it's not a keyword */ .fi ここで、再度バックアップをスキャナに組み込んだことに 気を付けなければなりません。 実際 .I 我々は 入力ストリームはレターと改行だけであることを知っていますが、 .I flex はこれが分からないため、 トークン "auto" などをスキャンした次の文字が改行でもレターでもない場合には バックアップが必要であると考えます。 以前は "auto" ルールに適合しそれで終りでしたが、 今は "auto" ルールは無く、"auto\\n" ルールだけがあります。 バックアップの可能性を除去するためには、 最後の改行以外のルールを二重化するか、 そのような入力に出くわさないので分類は不要と分かっているため、 改行を導入しないもう一つの全てを捕まえるルールを導入することが出来ます: .nf %% asm\\n | auto\\n | break\\n | ... etc ... volatile\\n | while\\n /* it's a keyword */ [a-z]+\\n | [a-z]+ | .|\\n /* it's not a keyword */ .fi .B \-Cf を付けてコンパイルすると、実際問題上 .I flex で得られるほぼ最速になります。 .PP 最後の注意事項: .I flex は NUL にマッチする時には遅く、トークンが複数の NUL を含む時には特に遅いです。 テキストがしばしば NUL を含むものと予想される場合には、テキストの .I 短い 部分とマッチするようにルールを書くべきです。 .PP もう一つの性能に関する最終注意事項: 入力のマッチ方法の節で既に示したように、 大きなトークンを納めるために .B yytext のサイズを動的に変更すると処理が遅くなります。 なぜなら、(巨大な)トークンを再度先頭からスキャンしなおさねばならないからです。 性能が重要な場合、 テキストの "大きな" 部分にマッチさせるべきですが "巨大な" 部分にマッチさせる べきではありません。 両者の堺目は 8K 文字/トークンです。 .SH C++ スキャナの生成 .I flex は 2 通りの C++ スキャナ生成方法を提供します。 最初の方法は .I flex が生成したスキャナを単に C コンパイラではなく C++ コンパイラで コンパイルするというものです。 この場合コンパイルエラーには出会わないはずです (見付けた場合には作者の節で後述する電子メールアドレスに報告して下さい)。 この場合ルールにおいて C コードではなく C++ コードを書くことが出来ます。 スキャナのデフォルトの入力元は .I yyin のままであり、 デフォルトのエコー先は .I yyout のままであることに注意して下さい。 どちらも .I FILE * 変数のままであり、C++ .I streams ではないです。 .PP .I flex に C++ スキャナクラスを生成させることも出来ます。 .B \-+ オプションを指定する(もしくは等価的に .B %option c++ を使う)とこのように実行され、 flex の実行形式名が '+' で終っている場合には自動的に指定されます。 このオプションを指定すると flex が生成するスキャナのデフォルトはファイル .B lex.yy.cc となり .B lex.yy.c ではありません。 生成されたスキャナは 2 つの C++ クラスとのインタフェースを定義するヘッダファイル .I FlexLexer.h をインクルードします。 .PP 最初のクラス .B FlexLexer は一般的なスキャナクラスを定義する抽象基盤クラスを提供します。 以下のメンバ関数を提供します: .TP .B const char* YYText() 最後にマッチしたテキストを返します。 .B yytext と等価です。 .TP .B int YYLeng() 最後にマッチしたトークンの長さを返します。 .B yyleng と等価です。 .TP .B int lineno() const 現在の入力の行番号( .B %option yylineno 参照)もしくは .B %option yylineno を使用していない場合には .B 1 を返します。 .TP .B void set_debug( int flag ) スキャナのデバッグフラグをセットします。 .B yy_flex_debug に代入するのと同じです(オプションの節で前述)。 スキャナ構築時に .B %option debug を使用してデバッグ情報を組み込む必要があることに注意して下さい。 .TP .B int debug() const 現在のデバッグフラグの設定を返します。 .PP また次のものと等価なメンバ関数も提供されます .B yy_switch_to_buffer(), .B yy_create_buffer() (最初の引数は .B istream* オブジェクトポインタであり .B FILE* ではありません), .B yy_flush_buffer(), .B yy_delete_buffer(), .B yyrestart() (これもまた最初の引数は .B istream* オブジェクトポインタです)。 .PP 2 番目のクラスは .I FlexLexer.h で定義される .B yyFlexLexer であり、 .B FlexLexer から導出したものです。 以下の追加のメンバ関数を定義します: .TP .B yyFlexLexer( istream* arg_yyin = 0, ostream* arg_yyout = 0 ) 与えられた入出力ストリームを使う .B yyFlexLexer オブジェクトを構築します。 指定しない場合にはそれぞれストリームのデフォルト .B cin と .B cout になります。 .TP .B virtual int yylex() これは .B yylex() が通常の flex スキャナに対して行ったのと同様の役割を担います: ルールのアクションが値を返すまで、 入力ストリームをスキャンし、トークンを消費します。 .B yyFlexLexer からサブクラス .B S を導出し .B yylex() から .B S のメンバ関数および変数をアクセスしたい場合、 .B %option yyclass="S" を指定して .B yyFlexLexer ではなくサブクラスを使用することを .I flex に知らせる必要があります。 この場合 .B yyFlexLexer::yylex() を生成するのではなく、 .I flex は .B S::yylex() (および呼び出されたなら .B yyFlexLexer::LexerError() を呼び出すダミーの .B yyFlexLexer::yylex() も)を生成します。 .TP .B virtual void switch_streams(istream* new_in = 0, .B ostream* new_out = 0) .B yyin を .B new_in (非ニルの場合) に再割当し、 .B yyout を .B new_out (同様)に再割当します。 .B yyin が再割当された場合には以前の入力バッファは消去されます。 .TP .B int yylex( istream* new_in, ostream* new_out = 0 ) まず入力ストリームを .B switch_streams( new_in, new_out ) を使用して切り替え、 .B yylex() の値を返します。 .PP さらに、 .B yyFlexLexer は次のプロテクトされた仮想関数を定義します。 スキャナにあわせてこれらを導出クラスにおいて再定義出来ます: .TP .B virtual int LexerInput( char* buf, int max_size ) 最大 .B max_size 文字を .B buf に読み込み、読めた文字数を返します。 入力の終りを示すには 0 文字を返します。"対話的" スキャナ( .B \-B と .B \-I フラグを参照)はマクロ .B YY_INTERACTIVE を定義することに注意して下さい。 .B LexerInput() を再定義し、 対話的な入力元をスキャンする可能性があるかどうかに依存して 異なるアクションが必要となる場合、 この名前が存在するかどうかのテストは .B #ifdef にて可能です。 .TP .B virtual void LexerOutput( const char* buf, int size ) .B size 文字をバッファ .B buf から書き出します。 スキャナのルールが NUL を含むテキストにマッチ可能な場合、 NUL 終端されているこのバッファは "内部に" NUL を含んでいても構いません。 .TP .B virtual void LexerError( const char* msg ) 致命的なエラーメッセージを報告します。 デフォルトのこの関数はメッセージをストリーム .B cerr に書き、終了します。 .PP .B yyFlexLexer オブジェクトは .I 全ての スキャン時の状態を含むことに注意して下さい。 それゆえこの様なオブジェクトをリエントラントなスキャナとして使用できます。 同一の .B yyFlexLexer クラスの複数のインスタンスを具体化可能であり、 複数の C++ スキャナクラスを組み合わせ上記 .B \-P オプションを使用することで同一のプログラムで使用可能です。 .PP 最後に .B %array 機能は C++ スキャナクラスでは使用できないことに注意して下さい; .B %pointer を使用しなければなりません(デフォルト)。 .PP 単純な C++ スキャナの例を以下に示します: .nf // An example of using the flex C++ scanner class. %{ int mylineno = 0; %} string \\"[^\\n"]+\\" ws [ \\t]+ alpha [A-Za-z] dig [0-9] name ({alpha}|{dig}|\\$)({alpha}|{dig}|[_.\\-/$])* num1 [-+]?{dig}+\\.?([eE][-+]?{dig}+)? num2 [-+]?{dig}*\\.{dig}+([eE][-+]?{dig}+)? number {num1}|{num2} %% {ws} /* skip blanks and tabs */ "/*" { int c; while((c = yyinput()) != 0) { if(c == '\\n') ++mylineno; else if(c == '*') { if((c = yyinput()) == '/') break; else unput(c); } } } {number} cout << "number " << YYText() << '\\n'; \\n mylineno++; {name} cout << "name " << YYText() << '\\n'; {string} cout << "string " << YYText() << '\\n'; %% int main( int /* argc */, char** /* argv */ ) { FlexLexer* lexer = new yyFlexLexer; while(lexer->yylex() != 0) ; return 0; } .fi 複数の(異なった)字句解析クラスを生成したい場合、 .B \-P フラグ (もしくは .B prefix= オプション) を使用して各 .B yyFlexLexer を .B xxFlexLexer 等の別の名前にします。 次に字句解析クラスのソースごとに .B をインクルードします。 以下のように .B yyFlexLexer をリネームします: .nf #undef yyFlexLexer #define yyFlexLexer xxFlexLexer #include #undef yyFlexLexer #define yyFlexLexer zzFlexLexer #include .fi これはあるスキャナに対し .B %option prefix="xx" を使用しもう一方に対し .B %option prefix="zz" を使用した場合です。 .PP 重要: 現在のスキャンクラスの形式は .I 実験的 であり、メジャーリリースが変わると大きく変更される可能性があります。 .SH LEX および POSIX との非互換性 .I flex は AT&T Unix の .I lex ツールのリライトですが(2 つの実装はいかなるコードも共有しません)、 いくばくかの拡張と非互換性を持っており、 どちらの実装でも受理可能なスキャナを書きたい方は これを意識しなければなりません。 flex は POSIX .I lex 仕様に完全合致しますが、例外は .B %pointer (デフォルト)使用と .B unput() 呼び出しにより .B yytext の内容を破壊することであり、これは POSIX 仕様に反します。 .PP この節では、 flex と AT&T lex と POSIX 仕様との間の全ての既知の非互換性を扱います。 .PP .I flex の .B \-l オプションはオリジナルの AT&T .I lex 実装との最大の互換性を有効にしますが、 生成されたスキャナの性能は大きく低下します。 .B \-l オプションを使用しても発生しうる非互換性は後で述べます。 .PP .I flex は以下の例外を除き .I lex と完全互換です: .IP - ドキュメントに記載されていない .I lex スキャナ内部の変数 .B yylineno は .B \-l もしくは .B %option yylineno を使用しないとサポートされません。 .IP .B yylineno はスキャナ毎(単一のグローバル変数)ではなく、バッファ毎に管理されるべきです。 .IP .B yylineno は POSIX 仕様ではありません。 .IP - .B input() ルーチンは再定義できませんが、 ルールにマッチしたものに後続する文字を読むために呼ばれえます。 .B input() がファイルの終りに到達すると、通常の .B yywrap() 処理は終了します。``実際の'' ファイルの終りは .I EOF として返されます。 .IP 実際には入力は .B YY_INPUT マクロを定義することにより制御されます。 .IP .B input() を再定義できないという .I flex の制限は、最初に .I yyin を設定する以外のスキャナ入力制御方法を単に規定していないという、 POSIX 仕様と合致します。 .IP - .B unput() ルーチンは再定義できません。この制限は POSIX に合致しています。 .IP - .I flex スキャナは .I lex スキャナとは異なりリエントラントではありません。 実際、対話的なスキャナにおいて、 割り込みハンドラにてロングジャンプを用いてスキャナから脱出し、 その後スキャナを再度呼び出す場合、以下のメッセージを得るでしょう: .nf fatal flex scanner internal error--end of buffer missed .fi スキャナに再度入るためには、まず以下のようにして下さい .nf yyrestart( yyin ); .fi この呼び出しにより入力バッファは捨てられることに注意して下さい; 通常これは対話的スキャナでは問題ではありません。 .IP また、C++ スキャナクラスはリエントラント .I です ので、C++ を使用できるのなら、C++ を使用すべきです。 前述の "C++ スキャナの生成" を参照して下さい。 .IP - .B output() はサポートされていません。 .B ECHO マクロからの出力はファイルポインタ .I yyout (デフォルトでは .I 標準出力 )に対して行われます。 .IP .B output() は POSIX 仕様にはありません。 .IP - .I lex は排他的開始条件 (%x) をサポートしませんが、これは POSIX 仕様にあります。 .IP - 定義を展開する時、 .I flex では括弧で括ります。 lex では以下は: .nf NAME [A-Z][A-Z0-9]* %% foo{NAME}? printf( "Found it\\n" ); %% .fi 文字列 "foo" にはマッチしません。 なぜなら展開されたマクロはルール "foo[A-Z][A-Z0-9]*?" と等価になり、 優先度にて `?' は "[A-Z0-9]*" と結び付きます。 .I flex ではルールが展開されると "foo([A-Z][A-Z0-9]*)?" となり、 文字列 "foo" がマッチします。 .IP .B ^ で始まるか .B $ で終る定義は、展開時に括弧で括らず、 これらのオペレータが定義において特別な意味を失わないようにすることに 注意して下さい。 しかし .B , /, .B <> オペレータは .I flex の定義では使用できません。 .IP .B \-l を使用すると、 .I lex の振舞いと同じく定義を括弧で括りません。 .IP POSIX 仕様では、定義を括弧で括ります。 .IP - .I lex の実装によっては、 ルールのパターンの右側に空白がある場合、 ルールのアクションを別の行から始めることを許します: .nf %% foo|bar { foobar_action(); } .fi .I flex はこの機能をサポートしません。 .IP - .I lex の .B %r (Ratfor スキャナの生成)オプションはサポートされていません。 これは POSIX 仕様には含まれません。 .IP - スキャナを .B %array を使用して構築したのではない限り、 .B unput() 呼び出し後には、次のトークンにマッチするまで .I yytext は未定義です。 これは .I lex にも POSIX 仕様にも当てはまりません。 .B \-l オプションを指定するとこの非互換性を取り除きます。 .IP - .B {} (数値範囲)オペレータの優先度が異なります。 .I lex は "abc{1,3}" を "1 度か 2 度か 3 度の 'abc' にマッチ" と解釈しますが、 .I flex は "'ab' に 1 度か 2 度か 3 度の 'c' が続くものにマッチ" と解釈します。 後者が POSIX 仕様に合致します。 .IP - .B ^ オペレータの優先度が異なります。 .I lex は "^foo|bar" を "行頭の 'foo' か任意位置の 'bar' にマッチ" と解釈しますが、 .I flex は "行頭の 'foo' か 'bar' にマッチ" と解釈します。 後者が POSIX 仕様に合致します。 .IP - .I lex でサポートされている .B %a 等の特別なテーブルサイズの宣言は .I flex スキャナでは不要です; .I flex はこれらを無視します。 .IP - .I flex と .I lex のどちらでもスキャナを使用可能に書けるように、 .bd .B FLEX_SCANNER という名前を定義します。 スキャナを生成した .I flex のバージョンを表す .B YY_FLEX_MAJOR_VERSION と .B YY_FLEX_MINOR_VERSION を、スキャナは含みます (例えば 2.5 リリースではこれらはそれぞれ 2 と 5 になります)。 .PP 以下の .I flex の機能は .I lex および POSIX 仕様には含まれません: .nf C++ スキャナ %option 開始条件スコープ 開始条件スタック 対話的/非対話的スキャナ yy_scan_string() 等 yyterminate() yy_set_interactive() yy_set_bol() YY_AT_BOL() <> <*> YY_DECL YY_START YY_USER_ACTION YY_USER_INIT #line ディレクティブ アクションの周りの %{} 単一行における複数のアクション .fi さらにほぼ全ての flex フラグです。 リストの最後の機能の意味は、 .I flex では複数のアクションをセミコロンで区切って同一行に記述可能ですが、 .I lex では次の .nf foo handle_foo(); ++num_foos_seen; .fi は (驚くべきことに) 次のように切り詰められるということです。 .nf foo handle_foo(); .fi .I flex はアクションを切り詰めません。 ブレースで括られないアクションは単純に行末で終了します。 .SH 診断 .I warning, rule cannot be matched 常に同じテキストにマッチするルールが前にあるので、 与えられたルールがマッチしません。 例えば以下の "foo" は "全てを捕まえる" ルールの後ろにありますので 決してマッチしません: .nf [a-z]+ got_identifier(); foo got_foo(); .fi スキャナ中で .B REJECT を使用するとこの警告を抑制します。 .PP .I warning, .B \-s .I option given but default rule can be matched (おそらくある特定の開始条件のもとでは) デフォルトルール (任意の一文字にマッチする) しか特定の入力に 対してはマッチしないことがあります。 .B \-s を指定しているので、おそらくそうなりません。 .PP .I reject_used_but_not_detected undefined あるいは .I yymore_used_but_not_detected undefined - これらのエラーは コンパイル時に起きます。スキャナが .B REJECT もしくは .B yymore() を使っていますが .I flex がそのことに気づかなかったということです。 つまり、 .I flex は最初の 2 つの部分を探しても これらのアクションの出現を見つけられなかったのですが、 実際には何らかの方法 (例えば #include ファイルを介して)でこれらが記述されていた、ということです。 .B %option reject か .B %option yymore を使用して、flex にこれらの機能を実際に使用していることを教えて下さい。 .PP .I flex scanner jammed - .B \-s でコンパイルされたスキャナが、どのルールにもマッチしない 入力文字列に遭遇しました。 内部的な問題に起因してこのエラーが起こることもあります。 .PP .I token too large, exceeds YYLMAX - スキャナが .B %array を使っている場合に、あるルールが定数 .B YYLMAX (デフォルトで 8K バイト) より大きな文字列とマッチしました。 .I flex の入力ファイルの定義部で .B YYLMAX を #define することで値を大きくできます。 .PP .I scanner requires \-8 flag to .I use the character 'x' - スキャナの記述に 8 ビットの文字 .I 'x' を識別する部分があり、 .B \-Cf もしくは .B \-CF のテーブル圧縮オプションのためにデフォルトの 7 ビットになっている にもかかわらず、 \-8 オプションをつけていないということです。 詳細は .B \-7 フラグのオプションの議論を参照して下さい。 .PP .I flex scanner push-back overflow - .B unput() でテキストを戻しすぎたため、スキャナのバッファは 戻したテキストと現トークンを .B yytext に保てません。 この場合、理想的にはスキャナが動的にバッファの大きさを変えるべきですが、 現在のところそうなってはいません。 .PP .I input buffer overflow, can't enlarge buffer because scanner uses REJECT - スキャナは非常に大きなトークンのマッチを調べていて、入力バッファを 拡張する必要が起きました。しかしながら、バッファの拡張は .B REJECT を使うスキャナでは働きません。 .PP .I fatal flex scanner internal error--end of buffer missed - スキャナが使用しているフレームから(を越えて)ロングジャンプした後、 再度スキャナに入った場合に起こります。 再度スキャナに入る前に: .nf yyrestart( yyin ); .fi を使うか、前述のように C++ スキャナクラスを使用するようにして下さい。 .PP .I too many start conditions in <> construct! - 存在するより多くの開始条件を <> 中に記載しました (少なくとも一つを二度記載しました)。 .SH 関連ファイル .TP .B \-ll スキャナがリンクしなければならないライブラリ。 .TP .I lex.yy.c 生成されたスキャナ(システムによっては .I lexyy.c という名前になります)。 .TP .I lex.yy.cc .B -+ を使った時に作成された C++ スキャナクラス。 .TP .I C++ スキャナベースクラス .B FlexLexer とその導出クラス .B yyFlexLexer を定義するヘッダファイル。 .TP .I flex.skl スケルトンスキャナ。 このファイルは flex の実行時ではなく、flex を構築する時のみ利用されます。 .TP .I lex.backup .B \-b フラグ用のバックアップ情報(システムによっては .I lex.bck という名前になります)。 .SH 欠陥 / バグ 右文脈(trailing context)パターンの中には、正しくマッチせず 警告メッセージ ("dangerous trailing context") を出すものがあります。 これらのパターンは、 ルールの最初の部分が 2番目の頭の部分とマッチするようなものです。 例えば "zx*/xy*" の場合、'x*' は右文脈の頭の 'x' とマッチします。 (POSIX ドラフトではそのようなパターンにマッチするテキストは 未定義であると述べていることに注意して下さい。) .PP 右文脈の中には、実際には固定長であるのにそうとは解釈されないものがあり、 上に述べた性能の低下が起こります。 特に、 '|' や {n} (例えば "foo{3}") は常に可変長であると解釈されます。 .PP 右文脈と特別なアクション '|' を組み合わせると .I 固定の 右文脈がよりコストのかかる .I 可変の 右文脈となります。例えば、次のようなものです: .nf %% abc | xyz/def .fi .PP .B %array もしくは .B \-l オプションを指定しない場合、 .B unput() を使うと yytext と yyleng を破壊します。 .PP NUL のパターンマッチングは他の文字の比較よりかなり遅くなっています。 .PP 入力バッファの動的な大きさの再調整は時間がかかります。これは現トークン (一般に巨大)までのマッチした全テキストの再スキャンを伴うためです。 .PP 入力のバッファリングと先読みのため、 ルーチンと 混合して使うことが出来ません。例えば、 .B getchar() と .I flex のルールはうまく行きません。代わりに .B input() を使って下さい。 .PP .B \-v オプションで表示される全テーブルエントリには、 どのルールがマッチしたのかを決定するのに必要なテーブルエントリ数が 含まれていません。エントリの数はスキャナが .B REJECT を使っていないときには DFA 状態数に等しく、 使っているときには DFA 状態数よりいくらか大きくなります。 .PP .B REJECT がオプション .B \-f もしくは .B \-F とともに使えません。 .PP .I flex の内部アルゴリズムについてのドキュメントが必要です。 .SH 関連項目 lex(1), yacc(1), sed(1), awk(1) .PP John Levine, Tony Mason, and Doug Brown, .I Lex & Yacc, O'Reilly and Associates. 第 2 版を入手すること。 .PP M. E. Lesk and E. Schmidt, .I LEX \- Lexical Analyzer Generator .PP Alfred Aho, Ravi Sethi and Jeffrey Ullman, .I Compilers: Principles, Techniques and Tools, Addison-Wesley (1986). .I flex で使用しているパターンマッチング技法を解説している(決定性オートマトン)。 .SH 作者 Vern Paxson が多くのアイディアとインスピレーションを得る助けを Van Jacobson から受けました。 オリジナルバージョンは Jef Poskanzer が作成しました。 高速テーブル表現は Van Jacobson のデザインの部分実装です。 この実装は Kevin Gong と Vern Paxson が行いました。 .PP 多くの .I flex ベータテスタ、フィードバッカ、コントリビュータ、特に Francois Pinard, Casey Leedom, Robert Abramovitz, Stan Adermann, Terry Allen, David Barker-Plummer, John Basrai, Neal Becker, Nelson H.F. Beebe, benson@odi.com, Karl Berry, Peter A. Bigot, Simon Blanchard, Keith Bostic, Frederic Brehm, Ian Brockbank, Kin Cho, Nick Christopher, Brian Clapper, J.T. Conklin, Jason Coughlin, Bill Cox, Nick Cropper, Dave Curtis, Scott David Daniels, Chris G. Demetriou, Theo Deraadt, Mike Donahue, Chuck Doucette, Tom Epperly, Leo Eskin, Chris Faylor, Chris Flatters, Jon Forrest, Jeffrey Friedl, Joe Gayda, Kaveh R. Ghazi, Wolfgang Glunz, Eric Goldman, Christopher M. Gould, Ulrich Grepel, Peer Griebel, Jan Hajic, Charles Hemphill, NORO Hideo, Jarkko Hietaniemi, Scott Hofmann, Jeff Honig, Dana Hudes, Eric Hughes, John Interrante, Ceriel Jacobs, Michal Jaegermann, Sakari Jalovaara, Jeffrey R. Jones, Henry Juengst, Klaus Kaempf, Jonathan I. Kamens, Terrence O Kane, Amir Katz, ken@ken.hilco.com, Kevin B. Kenny, Steve Kirsch, Winfried Koenig, Marq Kole, Ronald Lamprecht, Greg Lee, Rohan Lenard, Craig Leres, John Levine, Steve Liddle, David Loffredo, Mike Long, Mohamed el Lozy, Brian Madsen, Malte, Joe Marshall, Bengt Martensson, Chris Metcalf, Luke Mewburn, Jim Meyering, R. Alexander Milowski, Erik Naggum, G.T. Nicol, Landon Noll, James Nordby, Marc Nozell, Richard Ohnemus, Karsten Pahnke, Sven Panne, Roland Pesch, Walter Pelissero, Gaumond Pierre, Esmond Pitt, Jef Poskanzer, Joe Rahmeh, Jarmo Raiha, Frederic Raimbault, Pat Rankin, Rick Richardson, Kevin Rodgers, Kai Uwe Rommel, Jim Roskind, Alberto Santini, Andreas Scherer, Darrell Schiebel, Raf Schietekat, Doug Schmidt, Philippe Schnoebelen, Andreas Schwab, Larry Schwimmer, Alex Siegel, Eckehard Stolz, Jan-Erik Strvmquist, Mike Stump, Paul Stuart, Dave Tallman, Ian Lance Taylor, Chris Thewalt, Richard M. Timoney, Jodi Tsai, Paul Tuinenga, Gary Weik, Frank Whaley, Gerhard Wilhelms, Kent Williams, Ken Yap, Ron Zellar, Nathan Zelle, David Zuhn, および私の最低のメールアーカイブ能力から滑り落ちた方々、 それらの方々の協力にも同様に感謝します。 .PP Keith Bostic, Jon Forrest, Noah Friedman, John Gilmore, Craig Leres, John Levine, Bob Mulcahy, G.T. Nicol, Francois Pinard, Rich Salz, Richard Stallman には多くの悩みの分散に関して感謝します。 .PP Esmond Pitt と Earle Horton には 8 ビット文字サポートに関して; Benson Margulies と Fred Burke には C++ サポートに関して; Kent Williams と Tom Epperly には C++ クラスサポートに関して; Ove Ewerlid には NUL のサポートに関して; Eric Hughes には複数バッファのサポートに関して、それぞれ感謝します。 .PP この作品は当初、私が CA Berkeley の Lawrence Berkeley Laboratory における Real Time Systems Group にいた時に作成されました。 私に協力してくれた方々に感謝します。 .PP コメントは vern@ee.lbl.gov に送って下さい。 diff --git a/ja_JP.eucJP/man/man1/tcpdump.1 b/ja_JP.eucJP/man/man1/tcpdump.1 index ad13a0e3ea..8a218e86c9 100644 --- a/ja_JP.eucJP/man/man1/tcpdump.1 +++ b/ja_JP.eucJP/man/man1/tcpdump.1 @@ -1,1951 +1,1951 @@ -.\" @(#) $Header: /home/ncvs/doc/ja_JP.eucJP/man/man1/tcpdump.1,v 1.20 2003-03-10 00:02:01 horikawa Exp $ (LBL) +.\" @(#) $Header: /home/ncvs/doc/ja_JP.eucJP/man/man1/tcpdump.1,v 1.21 2004-03-23 13:39:30 kuriyama Exp $ (LBL) .\" .\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997 .\" The Regents of the University of California. All rights reserved. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that: (1) source code distributions .\" retain the above copyright notice and this paragraph in its entirety, (2) .\" distributions including binary code include the above copyright notice and .\" this paragraph in its entirety in the documentation or other materials .\" provided with the distribution, and (3) all advertising materials mentioning .\" features or use of this software display the following acknowledgement: .\" ``This product includes software developed by the University of California, .\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of .\" the University nor the names of its contributors may be used to endorse .\" or promote products derived from this software without specific prior .\" written permission. .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. .\" .\" %FreeBSD: src/contrib/tcpdump/tcpdump.1,v 1.12 2003/01/26 01:23:26 fenner Exp % .\" .\" $FreeBSD$ .\" .\" .TH TCPDUMP 1 "3 January 2001" .SH 名称 tcpdump \- ネットワーク上のトラフィックデータのダンプ .SH 書式 .na .B tcpdump [ .B \-adeflLnNOpqRStuvxX ] [ .B \-c .I count ] .br .ti +8 [ .B \-C .I file_size ] [ .B \-F .I file ] .br .ti +8 [ .B \-i .I interface ] [ .B \-m .I module ] [ .B \-r .I file ] .br .ti +8 [ .B \-s .I snaplen ] [ .B \-T .I type ] [ .B \-w .I file ] .br .ti +8 [ .B \-E .I algo:secret ] [ .B \-y .I datalinktype ] .ti +8 [ .I expression ] .br .ad .SH 解説 .LP \fItcpdump\fP は、オプションで指定されたネットワークインタフェース上で 取得可能なパケットのヘッダのうち \fIexpression\fP にマッチするものを出力 します。 パケットデータを後で分析するためファイルに保存するよう、 .B \-w フラグで実行することもできます。 また、 .B \-r フラグで、ネットワークインタフェースからのパケットではなく、 ファイルに保存されたパケットから読み込むことができます。 すべての場合に、 .I expression にマッチするパケットだけ、 .IR tcpdump によって処理されます。 .LP .I tcpdump は、 .B \-c フラグで実行しない場合、SIGINT シグナル ( 例えば、一般的な手法として 割り込み文字列である control-C の入力) か SIGTERM シグナル (一般的な手法として .BR kill (1) コマンド) によって割り込みがあるまで、パケットを捕捉し続けます。 .B \-c フラグで実行する場合は、 SIGINT シグナル や SIGTERM シグナルで割り込みされるか、 指定されたパケット数まで処理します。 .LP .I tcpdump がパケットの捕捉を終了したとき、以下の合計を 表示します。 .IP packets ``received by filter'' (この意味は、 .IR tcpdump を実行している OS に依存しますし、 おそらく OS のコンフィギュレーション方法にも依存するでしょう。 filter がコマンドラインで指定された場合、ある OS では それが filter expression によって一致したかどうかに関わらず、 パケットを数えます。 また別の OS では、filter expression によって一致した場合のみ .IR tcpdump によって処理されたパケットだけを数えます。) .IP packets ``dropped by kernel'' (OS がアプリケーションにその情報を報告する場合には、 バッファスペースの不足により、 .I tcpdump が走っている OS の パケットキャプチャ制御機構から、落ちてしまったパケット の数です。 それ以外の場合には、0 が表示されます。) .LP 大抵の BSD のような SIGINFO シグナルがサポートされている プラットホームでは、SIGINFO シグナル (例えば、一般的な手法として ``状態'' 文字列である control-T の入力) を受信したとき、それらの合計を表示して、パケットの捕捉を 引き続き行います。 .LP ネットワークインタフェースからパケットを読むには、 権限を必要とします。 .TP .B SunOS 3.x、4.x 上の NIT ないし BPF の場合: .I /dev/nit ないし .IR /dev/bpf* への読み込みアクセス権が必要です。 .TP .B Solaris 上の DLPI の場合: .IR /dev/le 等のネットワーク仮想デバイスへの読み書きアクセス権が必要です。 少なくとも Solaris のいくつかのバージョン上では、 .I tcpdump が promiscuous-mode で捕捉するには、 この条件だけでは不十分です。 それらの Solaris のバージョンでは、root になる必要があります。 もしくは promiscuous-mode で捕捉するには root に setuid されてインストールされている場合のみ .I tcpdump の実行が可能になります。 .TP .B HP-UX 上の DLPI の場合: 使用者が root であるか、 .I tcpdump が root に setuid されてインストールされている場合のみ実行可能です。 .TP .B IRIX 上の snoop の場合: 使用者が root であるか、 .I tcpdump が root に setuid されてインストールされている場合のみ実行可能です。 .TP .B Linux の場合: 使用者が root であるか、 .I tcpdump が root に setuid されてインストールされている場合のみ実行可能です。 .TP .B Ultrix および Digital UNIX の場合: スーパユーザが、 .IR pfconfig (8) を用いて promiscuous-mode での操作を許可していれば、どのユーザも .IR tcpdump . を使って、ネットワークトラフィックを捕捉できてしまいます。 .TP .B BSD の場合: .IR /dev/bpf* への読み込みアクセス権が必要です。 .LP 保存されたパケットファイルを読むには、権限を必要としません。 .SH オプション .TP .B \-a ネットワークアドレスとブロードキャストアドレスを名前に変換しようとします。 .TP .B \-c \fIcount\fP で指定した数のパケットを受信した後に終了します。 .TP .B \-C 保存ファイルに raw パケットを書き込む前に、 現在のファイルが \fIfile_size\fP より大きいかどうか をチェックします。 もし大きいなら、現在の保存ファイルを閉じて新しいものを開きます。 付けられるファイル名は、最初の保存ファイルを除く 2 番目以降の保存ファイルから .B \-w フラグで指定されたファイル名の 後にそれぞれ番号がつきます。 その番号は、2 から始まり順に大きくなります。 \fIfile_size\fP の単位は 100 万バイト (1,000,000 バイト。1,048,576 バイトの ことではない) です。 .TP .B \-d 解釈されたパケットマッチングコードを読みやすい形に整形した後、 標準出力にダンプして停止します。 .TP .B \-dd .B C プログラムの断片の形でパケットマッチングコードをダンプします。 .TP .B \-ddd (先頭に個数を付加した) 十進数の形でパケットマッチングコードをダンプします。 .TP .B \-e 各ダンプ行ごとに、リンクレベルのヘッダを出力します。 .TP .B \-E \fIalgo:secret\fP を、IPsec ESP パケットの解読に使用します。 アルゴリズムは \fBdes-cbc\fP, \fB3des-cbc\fP, \fBblowfish-cbc\fP, \fBrc3-cbc\fP, \fBcast128-cbc\fP, \fBnone\fP のいずれかです。 デフォルトは \fBdes-cbc\fP です。 パケット解読能力は、 \fItcpdump\fP が暗号機能付きでコンパイルされた場合のみ存在します。 \fIsecret\fP は、ESP 秘密鍵の ASCII テキストです。 現状、任意の 2 進数値を使用できません。 本オプションは、RFC1827 ESP ではなく、RFC2406 ESP を仮定します。 本オプションは、デバッグ専用であり、 本当の「秘密」鍵に対する使用は勧められません。 IPset 秘密鍵をコマンドラインに置くと、 .IR ps (1) 等によって他者に見えてしまいます。 .TP .B \-f 外部ホストの IPv4 アドレスについては、シンボルでなく数値で表示します。 (本オプションは、Sun の NIS サーバに重大な障害が発生するのを回避するこ とを意図しています。\(em 通常は、Sun の yp サーバは、ローカルに存在しない IP アドレスを永久に変換しつづけてハングします。) .TP .B \-F フィルタの表現として、\fIfile\fP に記述してある内容を用います。 コマンドラインで指定された追加表現は、無視されます。 .TP .B \-i \fIinterface\fP で指定されたインタフェースを監視します。 指定されない場合には、\fItcpdump\fP はシステムインタフェースリストの中で 最も小さい番号の稼働中のものを検索し、監視するインタフェースとして設定 します (ループバックインタフェースは検索しません)。 この動作は、最初にインタフェースが選択された時点で終了します。 .IP 2.2 以降のカーネルの Linux システムでは、 .I interface 引数 ``any'' を指定して全インタフェースからのパケットを捕捉可能です。 ``any'' デバイスでの捕捉は、promiscuous-mode ではないことに注意してください。 .TP .B \-l 標準出力を行バッファリングにします。データを捕捉しつつ、 そのデータを見たい場合には、本オプションは有効です。例えば .br ``tcpdump\ \ \-l\ \ |\ \ tee dat'' や ``tcpdump\ \ \-l \ \ > dat\ \ &\ \ tail\ \ \-f\ \ dat'' のように使用します。 .TP .B \-L インタフェースの既知のデータリンクタイプを列挙し、終了します。 .TP .B \-m SMI MIB モジュールの定義を、ファイル \fImodule\fR からロードします。 複数の MIB モジュールを \fItcpdump\fP にロードするために、 複数回このオプションを使用することができます。 .TP .B \-n アドレス (IP アドレスやポート番号など) を名前に変換しません。 .TP .B \-N ホスト名のうち、ドメイン名の表示をしません。例えば、本オプションを 指定すると、``nic.ddn.mil'' とは表示されず、かわりに ``nic'' とだけ表示し ます。 .TP .B \-O パケットマッチングコードのオプティマイザを動かしません。本オプションは、 オプティマイザ中のバグを疑う場合にのみ有効なものです。 .TP .B \-p ネットワークインタフェースを、promiscuous mode に設定しません。 ネットワークインタフェースは、何らかの理由により promiscuous mode に設定 されることもあり得るということに注意してください。ゆえに `-p' オプションは、`ether host {local-hw-addr} or ether broadcast' の短縮形として使うことは出来ません。 .TP .B \-q 素早い (静かな?) 出力を行ないます。出力する行を短くするために、通常出力 されるプロトコル情報の一部は出力されません。 .TP .B \-R ESP/AH パケットが古い仕様 (RFC1825 から RFC1829) に基いているものと仮定します。 指定すると、\fItcpdump\fP はリレー防止フィールドを表示しません。 ESP/AH 仕様にはプロトコルバージョンフィールドがありませんので、 \fItcpdump\fP は ESP/AH プロトコルのバージョンを推定できません。 .TP .B \-r パケットを、\fIfile\fR で指定したファイル ( .B \-w オプションで作成されます) か ら読み込みます。\fIfile\fR として``-''が指定された場合は標準入力が用いら れます。 .TP .B \-S TCP シーケンス番号を相対番号ではなく、絶対番号で出力します。 .TP .B \-s デフォルトの 68 バイト (SunOS の NIT では最小値は実際には 96) ではなくて、 \fIsnaplen\fP だけのデータを各パケットから取得します。68 バイトという データ長は、IP, ICMP, TCP, UDP のパケットを取得する分には十分ですが、 ネームサーバや NFS のパケットについてはプロトコル情報が切り詰められるこ とがあります (これについては、以後の説明を参照して下さい)。 スナップショットが限られた量しかとれずに切り 詰められたパケットは、出力に ``[|\fIproto\fP]'' という文字列がいっしょ に表示されます。 \fIproto\fP は、切り詰めが行われたプロトコルレベルの名 前です。大きなスナップショットをとる場合には、それだけパケット処理の時 間がかかるということと、パケットバッファリング用のバッファの量が減ると いうことに注意してください。これにより、パケットが消失するかもしれませ ん。\fIsnaplen\fP の大きさを、必要なプロトコル情報を取得できる最小の値に とどめるようにしてください。 \fIsnaplen\fP を 0 に設定すると、 パケット全体の捕捉に必要な長さを使用することを意味します。 .TP .B \-T "\fIexpression\fP" により選択されたパケットを強制的に \fItype\fR で 指定されたタイプと解釈します。有効なタイプは、 \fBcnfp\fR (Cisco NetFlow プロトコル), \fBrpc\fR (リモートプロシージャコール) \fBrtp\fR (リアルタイムアプリケーションプロトコル) \fBrtcp\fR (リアルタイムアプリケーション制御プロトコル) \fBsnmp\fR (シンプルネットワークマネージメントプロトコル) \fBvat\fR (ビジュアルオーディオツール) \fBwb\fR (ディストリビューテッドホワイトボード) です。 .TP .B \-t 各ダンプ行のタイムスタンプを出力しません。 .TP .B \-tt 各ダンプ行毎にタイムスタンプを人間が読みやすい形に変換せずに出力します。 .TP .B \-ttt 直前のダンプ行と現在のダンプ行の差分 (マイクロ秒単位) を表示します。 .TP .B \-tttt 各ダンプ行で、デフォルト書式でタイムスタンプを表示し、その前に日付を付けます。 .TP .B \-u デコードされてない NFS 操作を出力します。 .TP .B \-v (少しではありますが) 出力情報を増やします。例えば、IP パケット中の TTL、識別、全長、IP パケット中のオプションが表示されます。 追加のパケットの完全性確認が有効になります。 これは例えば IP および ICMP のヘッダのチェックサムです。 .TP .B \-vv さらに多くの情報を出力します。例えば、NFS の返答パケットの追加 フィールドや完全にデコードされた SMB パケット を出力します。 .TP .B \-vvv もっと多くの情報を出力します。例えば、telnet \fBSB\fP ... \fBSE\fP オプションが完全に表示されます。 .B \-X 付きでは、telnet オプションが 16 進数で表示されます。 .TP .B \-w 受信した生パケットを、解析したり画面に出力したりせずに \fIfile\fR で指定 したファイルに出力します。本オプションを用いて取得したパケットは \-r オプションを用いることで情報を見ることができます。\fIfile\fR で指定す るファイル名が ``-'' の場合には、標準出力を用います。 .TP .B \-x リンクレベルヘッダを除いた各パケットの内容を 16 進出力します。 パケットサイズが .I snaplen バイトより小さい場合にはパケットの全部の内容を、それ以外の場合には、 .I snaplen バイト分のデータをパケットごとに出力します。 .TP .B \-X 16 進出力時に、ASCII もまた表示します。 .B \-x もまた指定されると、パケットが 16 進数と ASCII の組み合わせで表示されます。 新規プロトコルを解析するのに非常に便利です。 .B \-x が指定されないと、 一部のパケットの一部が16 進数と ASCII の組み合わせで表示されます。 .TP .B \-y パケットキャプチャ中に使用するデータリンクタイプを \fIdatalinktype\fP に 設定します。 .IP "\fI expression\fP" .RS ダンプするパケットを選択します。\fIexpression\ が指定されない場合には、 ネットワーク上のすべてのパケットがダンプ対象になります。それ以外の場 合には、\fIexpression\fP の条件が真になるパケットのみダンプします。 .LP \fIexpression\fP は、1 つ以上の .I プリミティブ から成り立ちます。 プリミティブは通常 1 つ以上の限定子のついた .I id (名前もしくは番号) から成り立ちます。限定子は、3 種類あります。 .IP \fI型\fP 限定子は id 名や番号が参照するものの種類を指します。型には .BR host , .BR net , .B port があります。例えば、`host foo', `net 128.3', `port 20' のように用います。 型限定子が指定されない場合には、 .B host が指定されたものとみなされます。 .IP \fI方向\fP 限定子は、 パケットが .I id へ出ていく方向か、 .I id から来る方向か、 もしくはその両方かという、特定の転送方向を指定します。 指定可能な方向は、 .BR src , .BR dst , .BR "src or dst" , .BR "src and dst" の 4 つです。 例えば、`src foo', `dst net 128.3', `src or dst port ftp-data' のように 指定します。もし方向限定子が指定されない場合には、 .B "src or dst" が指定されたものとみなします。 `null' リンクレイヤ (つまり、slip などポイント・トゥ・ポイント・プロトコル) では、 必要な方向を指定するのに .B inbound や .B outbound 限定子を用いる事ができます。 .IP \fIプロトコル\fP 限定子は、特定のプロトコルに一致するパケットのみに制限します。 プロトコルとして指定可能なものは、 .BR ether , .BR fddi , .BR tr , .BR ip , .BR ip6 , .BR arp , .BR rarp , .BR decnet , .BR lat , .BR sca , .BR moprc , .BR mopdl , .BR iso , .BR esis , .BR isis , .BR icmp , .BR icmp6 , .B tcp , .BR udp です。 例えば `ether src foo', `arp net 128.3', `tcp port 21' のように使用 します。もしプロトコル限定子が指定されない場合には、上記のプロトコルの うち、型に矛盾しないすべてのものが指定されたものとみなします。 例えば `src foo' は、`(ip or arp or rarp) src foo' (これが正しい形式でな い事を除いて) と、`net bar' は `(ip or arp or rarp) net bar' と同義であ り、また `port 53' は `(tcp or udp) port 53' と同義です。 .LP [`fddi' は実際には `ether' の別名になっています。解析ではこれらを「特定の ネットワークインタフェースで使われるデータリンクレベル」を意味するもの として同様に扱います。FDDI ヘッダはイーサネットに似た始点と終点 アドレスを含み、そしてしばしばイーサネットに似たパケット型を含むので、 イーサネットのフィールドと同じように FDDI のフィールドをフィルタリング できます。FDDI ヘッダは他のフィールドも含みますが、フィルタ表現の中で 明示的にそれらを指定することはできません。 .LP 同様に、`tr' は `ether' の別名です。 直前の段落における FDDI ヘッダに関する記述は、 Token Ring ヘッダにも適用されます。] .LP 上記に追加して、いくつかの特別な「プリミティブ」キーワードがあります。 これらのキーワードは .BR gateway , .BR broadcast , .BR less , .B greater と算術演算表現 です。これらの後ろにパターンが続く事はありません。 プリミティブキーワードについては後述します。 .LP より複雑なフィルタの表現は、プリミティブの結合に .BR and , .BR or , .B not を用いることで実現されます。例えば、 `host foo and not port ftp and not port ftp-data' です。 タイプ量を少なくするために、同一の限定子リストは、省略することが可能です。 例えば、`tcp dst port ftp or ftp-data or domain' は、 `tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain' と同じ意味です。 .LP 許されるプリミティブは、以下の通りです。 .IP "\fBdst host \fIhost\fR" IPv4/v6 パケットの終点フィールドが \fIhost\fP で指定したものの場合に、 真となります。 \fIhost\fP は、ホスト名もしくは IP アドレスです。 .IP "\fBsrc host \fIhost\fR" IPv4/v6 パケットの始点フィールドが \fIhost\fP で指定したものの場合に、 真となります。 .IP "\fBhost \fIhost\fP IPv4/v6 パケットの始点フィールドもしくは終点フィールドが \fIhost\fP で指定したものの場合に、 真となります。 上記の host プリミティブの表現には、 \fBip\fP, \fBarp\fP, \fBrarp\fP, \fBip6\fP を 以下のように付加することが可能です。 .in +.5i .nf \fBip host \fIhost\fR .fi .in -.5i という表記は、 .in +.5i .nf \fBether proto \fI\\ip\fB and host \fIhost\fR .fi .in -.5i と同じ意味です。 \fIhost\fR が複数の IP アドレスを持つホスト名であった場合、それぞれのアドレス について照合を検査します。 .IP "\fBether dst \fIehost\fP イーサネットパケットの終点アドレスが \fIehost\fP だった場合に、真となります。 \fIehost\fP は、/etc/ethers に記述された名前もしくはイーサネットアドレスの値が用いられます (イーサネットアドレスの形式については、 .IR ethers (3N) を参照)。 .IP "\fBether src \fIehost\fP イーサネットパケットの始点アドレスが \fIehost\fP だった場合に、真となります。 .IP "\fBether host \fIehost\fP イーサネットパケットの始点アドレスもしくは終点アドレスが \fIehost\fP だった 場合に、真となります。 .IP "\fBgateway\fP \fIhost\fP パケットが \fIhost\fP で指定したアドレスのマシンをゲートウェイとしている場合に 真となります。言い替えると、始点もしくは終点のイーサネットアドレスが \fIhost\fP であり、始点と終点のどちらの IP アドレスも \fIhost\fP でない ということです。 \fIhost\fP マシンの host-name-to-IP-address (名前解決) 制御機構 (hosts ファイル、DNS、NIS など) とマシンの host-name-to-Ethernet-address (イーサネット アドレス解決) 制御機構 (/etc/ethers など) から見つけられる名前である必要があります。 (同様な記述は、 .in +.5i .nf \fBether host \fIehost \fBand not host \fIhost\fR .fi .in -.5i です。この場合 \fIhost / ehost\fP のどちらにも名前もしくは値を用いることが 可能になります。) この構文は、現在のところ、IPv6 が有効な構成では動作しません。 .IP "\fBdst net \fInet\fR" パケットの終点 IPv4/v6 アドレスが、 \fInet\fP で指定されたネットワークに属するものである場合に、 真となります。 \fInet\fP は、アドレス値もしくは /etc/networks で 定義されたネットワーク名のいずれかを指定可能です (詳しくは、\fInetworks(4)\fP を参照)。 .IP "\fBsrc net \fInet\fR" パケットの始点 IPv4/v6 アドレスが、 \fInet\fP で指定されたネットワークに属するものである場合に、真となります。 .IP "\fBnet \fInet\fR" 始点 IPv4/v6 アドレスもしくは終点 IPv4/v6 アドレスが \fInet\fP で指定された ネットワークに属するものである場合に、真となります。 .IP "\fBnet \fInet\fR \fBmask \fInetmask\fR" IP アドレスが、指定された \fInet\fR および \fInetmask\fR の値で決まる ネットワークに属するものである場合に、真となります。 \fBsrc\fR や \fBdst\fR を指定する事も可能です。 この構文は IPv6 \fInet\fR では正当でないことに注意してください。 .IP "\fBnet \fInet\fR/\fIlen\fR" IPv4/v6 アドレスが、指定された \fIlen\fR のビット長のネットマスクで \fInet\fR に属するネットワーク の場合に、真となります。 \fBsrc\fR や \fBdst\fR を指定する事も可能です。 .IP "\fBdst port \fIport\fR" パケットが ip/tcp, ip/udp, ip6/tcp, ip6/udp のいずれかであり、終点 ポート番号が \fIport\fP の場合に、真となります。 \fIport\fP で指定されるポート番号は、値もしくは /etc/services で定義 されているサービス名で指定可能です ( .IR tcp (4P) や .IR udp (4P) を参照)。 ポート番号がサービス名にて指定された場合、 ポート番号とプロトコルの両方がチェック 対象になります。ポート番号や、あいまいなサービス名が指定された場合には、 ポート番号のみがチェック対象となります(例えば、\fBdst port 513\fR は、 tcp/login と udp/who の両方を出力し、\fBport domain\fR は、tcp/domain と udp/domain の両方を出力します)。 .IP "\fBsrc port \fIport\fR" パケットが \fIport\fP で指定した始点ポート番号を保持している場合に 真となります。 .IP "\fBport \fIport\fR" パケットの始点ポート番号もしくは終点ポート番号が \fIport\fP の場合に、 真となります。 上記のポート番号の指定については、すべてキーワード \fBtcp\fP もし くは \fBudp\fP を用いて、ある程度候補を絞り込むことが可能です。例えば、 .in +.5i .nf \fBtcp src port \fIport\fR .fi .in -.5i と指定した場合には、tcp パケットのみが条件一致の評価対象となります。 .IP "\fBless \fIlength\fR" パケットが \fIlength\fP で指定した長さ以下の場合、真となります。 これは、 .in +.5i .nf \fBlen <= \fIlength\fR .fi .in -.5i の指定と等価です。 .IP "\fBgreater \fIlength\fR" パケットが \fIlength\fP で指定した長さ以上の場合、真となります。 これは、 .in +.5i .nf \fBlen >= \fIlength\fR .fi .in -.5i と等価です。 .IP "\fBip proto \fIprotocol\fR" パケットが \fIprotocol\fP で指定したプロトコル型の IP パケット ( 詳細は .IR ip (4P) を参照) の場合に、真となります。 \fIprotocol\fP は、数字もしくは \fIicmp\fP, \fIicmp6\fP, \fIigmp\fP, \fIigrp\fP, \fIpim\fP, \fIah\fP, \fIesp\fP, \fIvrrp\fP, \fIudp\fP, \fItcp\fP のいずれかの名前が指定可能です。\fItcp\fP, \fIudp\fP, \fIicmp\fP の 各識別子はキーワードでもであり、バックスラッシュ (\\)(C-shell では \\\\) を用 いてエスケープしなければならないことに注意してください。 このプリミティブはプロトコルヘッダチェーンを追跡しないことに注意してください。 .IP "\fBip6 proto \fIprotocol\fR" パケットがプロトコル型 \fIprotocol\fP の IPv6 パケットである場合に、 真となります。 このプリミティブはプロトコルヘッダチェーンを追跡しないことに注意してください。 .IP "\fBip6 protochain \fIprotocol\fR" パケットが IPv6 パケットであり、 プロトコルヘッダチェーン中にタイプ \fIprotocol\fR のプロトコルヘッダが 含まれるばあい に、真となります。 例えば .in +.5i .nf \fBip6 protochain 6\fR .fi .in -.5i は、TCP プロトコルヘッダがプロトコルヘッダチェーン中に含まれる 任意のパケットにマッチします。 パケット中には、IPv6 ヘッダと TCP ヘッダの間に、 例えば、認証ヘッダ、ルーティングヘッダ、ホップ毎のオプションヘッダが 含まれ得ます。 このプリミティブが出力する BPF コードは、 複雑であり \fItcpdump\fP 中の BPF 最適化コードでは最適化できません。 よって、この動作はいくぶん遅いです。 .IP "\fBip protochain \fIprotocol\fR" \fBip6 protochain \fIprotocol\fR と同様で、 IPv4 のものです。 .IP "\fBether broadcast\fR" パケットがイーサネットブロードキャストパケットの場合に、真となります。 \fIether\fP キーワードは、省略可能です。 .IP "\fBip broadcast\fR" パケットが IP ブロードキャストパケットの場合に、真となります。オール 1 と オール 0 の二つの形式のブロードキャストアドレスを検査し、そして ローカルサブネットマスクを調べます。 .IP "\fBether multicast\fR" パケットがイーサネットマルチキャストパケットの場合に、真となります。 \fIether\fP キーワードは、省略可能です。 なお、この指定は、`\fBether[0] & 1 != 0\fP' の短縮系です。 .IP "\fBip multicast\fR" パケットが IP マルチキャストパケットの場合に、真となります。 .IP "\fBip6 multicast\fR" パケットが IPv6 マルチキャストパケットの場合に、真となります。 .IP "\fBether proto \fIprotocol\fR" パケットが \fIprotocol\fR で指定した ether 型の場合に、真になります。 \fIprotocol\fP は、数字もしくは \fIip\fP, \fIip6\fP, \fIarp\fP, \fIrarp\fP, \fIatalk\fP, \fIaarp\fP, \fIdecnet\fP, \fIsca\fP, \fIlat\fP, \fImopdl\fP, \fImoprc\fP, \fIiso\fP, \fIstp\fP, \fIipx\fP, \fInetbeui\fP のいずれかの名前を指定可能です。 これらの識別子はキーワードでもあり、バックスラッシュ (\\) でエスケープし なければならないことに注意してください。 .IP [FDDI (例えば `\fBfddi protocol arp\fR') や Token Ring ( 例えば`\fBtr protocol arp\fR') 、 これらのほとんどのプロトコルの場合、プロトコルの識別は IEEE802.2 の論理リンク制御 (LLC) ヘッダによって行われます。 通常これは FDDI ヘッダや Token Ring ヘッダの上の層にあります。 .IP FDDI または Token Ring のほとんどのプロトコル識別 をフィルタリングするとき、\fItcpdump\fR は Ethernet をカプセル化するために LLC ヘッダのプロトコル ID 範囲のみ、 いわゆる SNAP フォーマットである 管理組織識別子 (OUI) の 0x000000 の範囲のみをチェックします。 パケットが SNAP フォーマットである OUI の 0x000000 にあるか どうかはチェックしません。 .IP 例外は以下の通りです。 \fIiso\fP は LLC ヘッダの DSAP (Destination Service Access Point) と SSAP (Source Service Access Point) の 範囲もチェックします。 \fIstp\fP および \fInetbeui\fP は、LLC ヘッダの DSAP をチェックします。 \fIatalk\fP は、 SNAP フォーマットである OUI の 0x080007 と、Appletalk etype に対してチェックします。 .IP Ethernet の場合、\fItcpdump\fR は、 これらのプロトコルのほとんどに対して Ethernet 型の 範囲をチェックします。 例外は以下の通りです。 \fIiso\fP、\fIsap\fP および \fInetbeui\fP では FDDI および Token Ring の場合と同様に 802.3 フレームをチェックし、次に LLC ヘッダをチェックします。 \fIatalk\fP では FDDI および Token Ring の場合と同様に Ethernet フレーム内 の Appletalk etype および SNAP フォーマットパケットの両方に対してチェックします。 \fIaarp\fP では Ethernet フレームまたは 802.3 SNAP フレームである OUI の 0x000000 と、 Appletalk ARP etype に対してチェックします。 そして、\fIipx\fP では、Ethernet フレーム内の IPX etype、 LCC ヘッダ内の IPX DSAP、LCC ヘッダが IPX でカプセル化 されていない 802.2 および SNAP フレーム内の IPX etype を チェックします。 ] .IP "\fBdecnet src \fIhost\fR" DECNET パケットの始点アドレスが .IR host の場合に、真となります。これは ``10.123'' という形式のアドレスでも DECNET の ホスト名でも構いません。[DECNET のホスト名は DECNET を動かすように設定され た Ultrix システムのみでサポートされます。] .IP "\fBdecnet dst \fIhost\fR" DECNET パケットの終点アドレスが .IR host の場合に、真となります。 .IP "\fBdecnet host \fIhost\fR" DECNET パケットの始点あるいは終点アドレスが .IR host の場合に、真となります。 .IP "\fBip\fR, \fBip6\fR, \fBarp\fR, \fBrarp\fR, \fBatalk\fR, \fBaarp\fR, \fBdecnet\fR, \fBiso\fR, \fBstp\fR, \fBipx\fR, \fInetbeui\fP" .in +.5i .nf \fBether proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 .IP "\fBlat\fR, \fBmoprc\fR, \fBmopdl\fR" .in +.5i .nf \fBether proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 \fItcpdump\fP は今のところこれらのプロトコルを解釈できない事に注意して ください。 .IP "\fBvlan \fI[vlan_id]\fR" パケットが IEEE 802.1Q VLAN パケットの場合、真になります。 \fI[vlan_id]\fR が指定された場合、 パケットが指定された \fIvlan_id\fR を持つ場合のみ、真になります。 \fIexpression\fR 中の最初の \fBvlan\fR キーワードが、 パケットが VLAN パケットであることを仮定して、 残りの \fIexpression\fR のデコード用オフセットを変更してしまうことに 注意してください。 .IP "\fBtcp\fR, \fBudp\fR, \fBicmp\fR" .in +.5i .nf \fBip proto \fIp\fR\fB or ip6 proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 .IP "\fBiso proto \fIprotocol\fR" パケットがプロトコル型 \fIprotocol\fP の OSI パケットの場合、真になります。 \fIprotocol\fP は数値もしくは \fIclnp\fP, \fIesis\fP, \fIisis\fP という名前のいずれかです。 .IP "\fBclnp\fR, \fBesis\fR, \fBisis\fR" .in +.5i .nf \fBiso proto \fIp\fR .fi .in -.5i の短縮形です。\fIp\fR の部分には、上記のいずれかのプロトコル名が入ります。 \fItcpdump\fR はこれらのプロトコルを完全には解釈できない事に注意して ください。 .IP "\fIexpr relop expr\fR" \fIrelop\fRは、>, <, >=, <=, =, != のいずれかであり、\fIexpr\fR の部分に は、(標準 C 言語の構文で表現された) 整数定数や通常の二項演算子 [+, -, *, /, &, |]、length 演算子、そして特殊なパケットデータへのアクセス演算子などか らなる算術表現が入って、その関係が成立する場合に、真となります。 パケット内部のデータにアクセスするためには、以下の構文を用います。 .in +.5i .nf \fIproto\fB [ \fIexpr\fB : \fIsize\fB ]\fR .fi .in -.5i \fIproto\fRは、\fBether, fddi, tr, ip, arp, rarp, tcp, udp, icmp, ip6\fR のいずれかであり、インデックス操作を行うプロトコル層を指示 します。 \fItcp, udp\fR および他の上位層プロトコル型は、 IPv4 のみに適用され、IPv6 には適用されないことに注意してください (これは将来修正されます)。 指示したプロトコル層からの相対バイトオフセットは、\fIexpr\fR で指定します。 \fIsize\fR は省略可能で、取得するフィールドのデータ長を表します。 データ長としては、1,2,4 のいずれかを指定することが可能であり、デフォルトでは 1 が指定されたものとみなされます。 キーワード \fBlen\fP で示されるデータ長演算子は、パケット長を与えます。 例えば、`\fBether[0] & 1 != 0\fP' は、全てのマルチキャストパケットを捕捉します。 `\fBip[0] & 0xf != 5\fP' という表現は、すべてのオプション付きIPパケットを捕捉す ることを意味します。`\fBip[6:2] & 0x1fff = 0\fP' という表現は、フラグメントのな いデータグラムパケット、もしくはフラグメント化されたデータグラムのうち 最初のフラグメントを捕捉します。 この検査は、\fBtcp\fP および \fBudp\fP のインデックス操作においては、暗黙のうち に適用されます。 例えば、\fBtcp[0]\fP は常に TCP \fIヘッダ\fPの先頭バイトを指し、 決して各フラグメントの先頭バイトを指すものではありません。 いくつかのオフセットとフィールド値は、数値ではなく 定数として表記できます。 次のプロトコルヘッダフィールドオフセットが利用可能です。 \fBicmptype\fP (ICMP タイプフィールド)、\fBicmpcode\fP (ICMP コードフィールド) および \fBtcpflags\fP (TCP フラグフィールド) 次の ICMP タイプフィールド値が利用可能です。 \fBicmp-echoreply\fP, \fBicmp-unreach\fP, \fBicmp-sourcequench\fP, \fBicmp-redirect\fP, \fBicmp-echo\fP, \fBicmp-routeradvert\fP, \fBicmp-routersolicit\fP, \fBicmp-timxceed\fP, \fBicmp-paramprob\fP, \fBicmp-tstamp\fP, \fBicmp-tstampreply\fP, \fBicmp-ireq\fP, \fBicmp-ireqreply\fP, \fBicmp-maskreq\fP, \fBicmp-maskreply\fP 次の TCP フラグフィールド値が利用可能です。 \fBtcp-fin\fP, \fBtcp-syn\fP, \fBtcp-rst\fP, \fBtcp-push\fP, \fBtcp-push\fP, \fBtcp-ack\fP, \fBtcp-urg\fP .LP プリミティブは、以下のように組み合わせることが可能です。 .IP 括弧で括られた一連のプリミティブや演算子 (括弧はシェルの特殊文字なのでエスケープする必要があります)。 .IP 否定 (`\fB!\fP' or `\fBnot\fP'). .IP 論理積 (`\fB&&\fP' or `\fBand\fP'). .IP 論理和 (`\fB||\fP' or `\fBor\fP'). .LP 否定は、最も高い演算優先度を持ちます。論理和と論理積は、同じ演算優先度を持ち、 左から右へ評価されます。論理積の場合には、単に識別子を並べるのではなく、 明示的に \fBand\fR を使用しなければならないことに注意して下さい。 .LP キーワードなしで識別子が与えられている場合には、最も最近用いられたキーワードが 付加されているものと仮定されます。 例えば、 .in +.5i .nf \fBnot host vs and ace\fR .fi .in -.5i は、 .in +.5i .nf \fBnot host vs and host ace\fR .fi .in -.5i の短縮形ですが、 .in +.5i .nf \fBnot ( host vs or ace )\fR .fi .in -.5i と混同してしまいがちなので気をつけましょう。 .LP 引数 expression は、単一の引数としても複数の引数としても、どちらか便利な 方で、\fItcpdump\fP に渡すことができます。 一般的に、引数がシェルのメタキャラクタを含む場合、その引数をクォート された単一の引数としてプログラムに渡す方が容易です。 複数の引数は、解析される前にスペースで連結されます。 .SH 使用例 .LP \fIsundown\fP に到達する、もしくはそこから送信されるパケットのすべてを 表示する場合には、以下のように実行します。 .RS .nf \fBtcpdump host sundown\fP .fi .RE .LP \fIhelios\fR と、\fIhot\fR もしくは \fIace\fR の間のトラフィックを表示する 場合には、以下のように実行します。 .RS .nf \fBtcpdump host helios and \\( hot or ace \\)\fP .fi .RE .LP \fIace\fR と、\fIhelios\fR 以外のホストとの間でやりとりされるすべての IP パケットを表示する場合には、以下のように実行します。 .RS .nf \fBtcpdump ip host ace and not helios\fP .fi .RE .LP ローカルなホストと Berkeley のホストとの間でやりとりされるすべての トラフィックを表示する場合には、以下のように実行します。 .RS .nf .B tcpdump net ucb-ether .fi .RE .LP インターネットゲートウェイ \fIsnup\fP を通過するすべての ftp トラフィックを表示する場合には、以下のように実行します (シェルが括弧を誤って解釈しないよう、フィルタを表現する引数がクォートさ れていることに注意して下さい)。 .RS .nf .B tcpdump 'gateway snup and (port ftp or ftp-data)' .fi .RE .LP 始点アドレスと終点アドレスの両方がローカルネットワーク内のホスト のものでないトラフィックについて表示する場合には、以下のように実行しま す (実行するホストが他のネットワークに対するゲートウェイの場合、そのホスト が属すローカルネットワークでは、このコマンドは成功しないでしょう)。 .RS .nf .B tcpdump ip and not net \fIlocalnet\fP .fi .RE .LP ローカルネットワーク外のホストとの通信において、TCP による各通信単位 のスタートパケットとエンドパケット (SYN と FIN パケット) を表示するには、以 下のように実行します。 .RS .nf .B tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net \fIlocalnet\fP' .fi .RE .LP ゲートウェイ \fIsnup\fP を中継される IP パケットのうち、576 バイトより大きいもの を表示するには、以下のように実行します。 .RS .nf .B tcpdump 'gateway snup and ip[2:2] > 576' .fi .RE .LP イーサネット上でブロードキャストもしくはマルチキャストを経由して送られる もの以外の IP ブロードキャストもしくはマルチキャストパケットを表示するには、 以下のように実行します。 .RS .nf .B tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224' .fi .RE .LP echo 要求/応答以外 (つまり ping パケット以外) の全ての ICMP パケットを 表示するには、以下のように実行します。 .RS .nf .B tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply' .fi .RE .SH 出力形式 .LP \fItcpdump\fP の出力は、プロトコル依存です。以下の説明では、簡単な パラメータの記述と、おおよそのフォーマットの説明を行ないます。 .de HD .sp 1.5 .B .. .HD リンクレベルヘッダ .LP もし '-e' オプションが指定されると、リンクレベルヘッダが出力されます。 イーサネットにおいては、始点と終点のアドレス、プロトコル、そして パケット長が出力されます。 .LP FDDI ネットワークにおいては、'-e' オプションが指定されると \fItcpdump\fP は、「フレーム制御」フィールド、発信元と終点アドレス、そしてパケット長を 出力します。「フレーム制御」フィールドはパケットの残りの部分の解釈を決定 します。(IP データグラムを含むような) 通常のパケットは `async' パケットで、 0 から 7 の間の優先順位を持ちます。例えば、`\fBasync4\fR' です。こうした パケットは IEEE802.2 の論理リンク制御 (LLC) パケットを含むと仮定されます。 LLC ヘッダは、それが ISO データグラムでない場合やいわゆる SNAP パケットのと きには出力されます。 .LP Token Ring ネットワークでは、'-e' オプションを指定すると、\fItcpdump\fP は、 アクセス制御」と「フレーム制御」のフィールド、 始点と終点のアドレス、パケット長を表示します。 FDDI ネットワークでは、パケットは LLC パケットを含むと仮定されます。 オプション '-e' の指定の有無にかかわらず、 始点経路制御されたパケットに対しては、始点経路制御情報が表示されます。 .LP \fI (注意: 以下の記述は、利用者が RFC1144 に記述されている SLIP 圧縮 アルゴリズムについての知識がある前提で書いています。)\fP .LP SLIP によるリンクにおいては、方向指示子 (``I'' が入力方向、``O'' が出力方向)、パケット型、そして圧縮情報が出力されます。 パケット型は、最初に出力されます。パケット型には \fIip\fP、\fIutcp\fP、そして \fIctcp\fP の 3 つがあります。 \fIip\fR 型パケットの場合、上記以上のリンク情報は表示されません。 TCP パケットの場合には、コネクション識別子がパケット型に続いて出力されます。 パケットが圧縮されている場合、符号化されたヘッダが出力されます。 特殊な場合は \fB*S+\fIn\fR や \fB*SA+\fIn\fR のように出力されます。ここ で \fIn\fR は、シーケンス番号 (もしくはシーケンス番号および ack) が変更された回 数です。特殊な場合でなければ、0 回以上の変更について出力されます。 変更は、U (緊急 (urgent) ポインタ)、W (ウィンドウ)、A (ack)、S (シーケンス番号)、 そして I (パケット ID) で示され、変動量 (+n or -n) もしくは新しい値 (=n) が続きます。 最後に、パケット内のデータの総量および圧縮ヘッダ長が出力されます。 .LP 例えば、以下の行は、出力方向の圧縮 TCP パケットを、暗黙のコネクション識別子 とともに表示しています。ack は 6 変わり、シーケンス番号は 49 変わり、パケット ID は 6 変わっています。3 バイトのデータと6 バイトの圧縮ヘッダが存在します。 .RS .nf \fBO ctcp * A+6 S+49 I+6 3 (6)\fP .fi .RE .HD ARP/RARP パケット .LP arp/rarp パケットの出力は、要求型とその引数を示してい ます。出力形式は、その出力のみで理解可能なように作られています。 以下に、ホスト \fIrtsg\fP からホスト \fIcsam\fP への `rlogin' 開始時の パケットの実例を示します。 .RS .nf .sp .5 \f(CWarp who-has csam tell rtsg arp reply csam is-at CSAM\fR .sp .5 .fi .RE 1行目は、ホスト rtsg が、ホスト csam のイーサネットアドレスを問い合わせる 目的で arp パケットを送信していることを意味します。ホスト csam は、自分自身 のイーサネットアドレスを返答しています (この例では、イーサネットアドレス は大文字で、インターネットアドレス部は小文字で表記しています)。 .LP \fItcpdump \-n\fP として起動した場合には、少し冗長になります。 .RS .nf .sp .5 \f(CWarp who-has 128.3.254.6 tell 128.3.254.68 arp reply 128.3.254.6 is-at 02:07:01:00:01:c4\fR .fi .RE .LP \fItcpdump \-e\fP として起動した場合には、最初のパケットはブロードキャスト パケットであり、次のパケットはポイントツーポイントのパケットであることが わかります。 .RS .nf .sp .5 \f(CWRTSG Broadcast 0806 64: arp who-has csam tell rtsg CSAM RTSG 0806 64: arp reply csam is-at CSAM\fP .sp .5 .fi .RE 最初のパケットについては、始点のイーサネットアドレスは RTSG であり、 終点はイーサネットブロードキャストアドレス、型フィールドには 16 進数の値 0806 (ETHER_ARP を意味します) が格納されており、総パケット長は 64 バイトである と表示しています。 .HD TCP パケット .LP \fI(注意:以下の記述は、RFC793 に記述されている TCP プロトコルについての知識 があることを前提に記述されています。この知識がない場合、本記述と \fItcpdump\fP のいずれもあなたには役に立たないでしょう。)\fP .LP TCP プロトコル行の一般的な形式は、以下の通りです。 .RS .nf .sp .5 \fIsrc > dst: flags data-seqno ack window urgent options\fP .sp .5 .fi .RE \fIsrc\fP と \fIdst\fP は、それぞれ始点と終点の IP アドレスと ポート番号です。\fIflags\fP の部分には、S (SYN), F (FIN), P (PUSH), R (RST) の組み合わせ、もしくは単なる `.' (フラグなし) が入ります。 \fIdata-seqno\fP は、このパケット内のデータがシーケンス空間のどの部分に あたるかを示します (以下の例を参照して下さい)。 \fIack\fP は、本コネクション上を逆方向に次に流れるデータパケットの シーケンス番号です。 \fIwindow\fP は、本コネクションの逆方向のパケットを格納するバッファサイズ です。 \fIurg\fP は、パケット中に `urgent' (緊急) データが格納されていることを示しま す。 \fIoptions\fP は、例えば のように、アングルブラケット (大小記号) で 括られた tcp オプションです。 .LP \fIsrc、dst\fP、そして \fIflags\fP は、常に表示されます。他のフィールドは、 パケットの TCP ヘッダに依存し、表示できる場合だけ表示されます。 .LP 以下の例は、ホスト \fIrtsg\fP からホスト \fIcsam\fP への rlogin 開設時のシーケンスの一部です。 .RS .nf .sp .5 \s-2\f(CWrtsg.1023 > csam.login: S 768512:768512(0) win 4096 csam.login > rtsg.1023: S 947648:947648(0) ack 768513 win 4096 rtsg.1023 > csam.login: . ack 1 win 4096 rtsg.1023 > csam.login: P 1:2(1) ack 1 win 4096 csam.login > rtsg.1023: . ack 2 win 4096 rtsg.1023 > csam.login: P 2:21(19) ack 1 win 4096 csam.login > rtsg.1023: P 1:2(1) ack 21 win 4077 csam.login > rtsg.1023: P 2:3(1) ack 21 win 4077 urg 1 csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1\fR\s+2 .sp .5 .fi .RE 最初の行は、ホスト rtsg の TCP ポート 1023 番からホスト csam の \fIlogin\fP ポートに対してパケットを送信していることを意味します。\fBS\fP は、 パケットの \fISYN\fP フラグが設定されていることを意味します。 パケットのシーケンス番号は 768512 番であり、データは含みません。 (表記は `first:last(nbytes)' であり、これは「シーケンス番号 \fIfirst\fP か ら \fIlast\fP までの \fIlast\fP を含まない \fInbytes\fP のユーザデータという こと」を意味しています。) このパケット中に ack はなく、有効な受信ウィンドウの大きさは 4096 バイトで あり、1024 バイトの最大セグメントサイズ要求を行なうオプションが付加され ています。 .LP csam は、rtsg から送られたパケットと類似したパケットを送り返しますが、 rtsg の送った SYN に対する ack が含まれるところが異なり ます。続いて、rtsg は csam の SYN に対する ack を返します。 `.' は、S (SYN), F (FIN), P (PUSH), R (RST) のいずれのフラグも 立っていないことを意味します。 パケットはデータを含まないため、データシーケンス番号は入りません。 ack シーケンス番号が小さい整数 (1) であることに注意して下さい。 \fItcpdump\fP は、初めて TCP の「通信」を検出すると、パケットから取得した シーケンス番号を表示します。通信のその後のパケットについては、現在の パケットシーケンス番号と、この最初のシーケンス番号の間の差を表示します。 このことは、最初に取得した以降のシーケンス番号は、通信データストリーム の相対位置として解釈できることを意味します (最初の各方向のデータバイト は 1 です)。`-S' は、本機能を無効にし、元のシーケンス番号を表示します。 .LP 6 行目では、rtsg は csam に 19 バイトのデータを送信しています (rtsg \(-> csam の 方向の通信における、2 バイト目から 20 バイト目までのデータ)。PUSH フラグが このパケットでは設定されています。 7 行目では、csam は rtsg から 20 バイトまでのデータを受けとった旨の レスポンスを rtsg に返しています。csam の受信ウィンドウが19バイト小さくなっ たことから、これらのデータのほとんどは、ソケットバッファの中に存在する ことが分かります。 csam は、rtsg に 1 バイトのデータを送信しています。 8 行めと 9 行めでは、csam は緊急 (urgent) で PUSH フラグの設定された 2 バイトデータを送信しています。 .LP スナップショットが小さ過ぎて \fItcpdump\fP が TCP ヘッダ全体を捕えなかった場合、 可能な限りのヘッダを解釈し、``[|\fItcp\fP]'' を表示して 残りを解釈できなかったことを示します。 (短か過ぎるまたはヘッダを越えてしまうといった) 不正なオプションを ヘッダが持つ場合には、tcpdump は ``[\fIbad opt\fP]'' を表示して 残りのオプションを解釈しません (どこから開始したら良いのか分からないからです)。 ヘッダ長によりオプションが存在することが分かるが、 IP データグラム長がオプションがそこにあるために十分な長さではない場合に、 \fItcpdump\fP は ``[\fIbad hdr length\fP]'' を表示します。 .HD .B 特定フラグの組み合わせ (SYN-ACK, URG-ACK 等) による TCP パケットの捕捉 .PP TCP ヘッダの制御ビットセクションには、次の 8 ビットがあります: .IP .I CWR | ECE | URG | ACK | PSH | RST | SYN | FIN .PP TCP 接続の確立に使用されるパケットを見たいものとしましょう。 新規接続を初期化する時、 TCP は 3 ウェイハンドシェークプロトコルを使用することを思い出してください。 TCP 制御ビットに関する接続の順番は次のようになります。 .PP .RS 1) 呼び出し側が SYN を送信 .RE .RS 2) 受信者が SYN, ACK で応答 .RE .RS 3) 呼び出し側が ACK を送信 .RE .PP ここで、SYN ビットを持つパケットを捕捉したいとします (第 1 ステップ)。 ステップ 2 のパケット (SYN-ACK) は不要で、 最初の SYN だけが欲しいことに注意してください。 必要なのは、\fItcpdump\fP の正しいフィルタ式です。 .PP オプション無しの TCP ヘッダの構造を思い出してください: .PP .nf 0 15 31 ----------------------------------------------------------------- | 始点ポート | 終点ポート | ----------------------------------------------------------------- | シーケンス番号 | ----------------------------------------------------------------- | 確認応答番号 | ----------------------------------------------------------------- | HL | 予約 |C|E|U|A|P|R|S|F| ウィンドウサイズ | ----------------------------------------------------------------- | TCP チェックサム | 緊急ポインタ | ----------------------------------------------------------------- .fi .PP TCP ヘッダは、オプションが無ければ通常、20 オクテットのデータを持ちます。 図の最初の行はオクテット 0 から 3 を示し、 次の行はオクテット 4 から 7 を示す等となります。 .PP 0 から数え始めると、必要な TCP 制御ビットはオクテット 13 にあります: .PP .nf 0 7| 15| 23| 31 ----------------|---------------|---------------|---------------- | HL | 予約 |C|E|U|A|P|R|S|F| ウィンドウサイズ | ----------------|---------------|---------------|---------------- | |13 オクテット目| | | .fi .PP 第 13 オクテットをもっとよく見てみましょう: .PP .nf | | |---------------| |C|E|U|A|P|R|S|F| |---------------| |7 5 3 0| .fi .PP これらは我々が興味がある TCP 制御ビットです。 このオクテットのビットを、右から左へ、0 から 7 と番号付けします。 PSH ビットは第 3 ビットであり、URG ビットは第 5 ビットです。 .PP 最初の SYN だけを持つパケットが欲しいことに注意してください。 SYN ビットがセットされた TCP データグラムが到着すると、 第 13 オクテットになにが起きるか見てみましょう: .PP .nf |C|E|U|A|P|R|S|F| |---------------| |0 0 0 0 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0| .fi .PP 制御ビットセクションを見ると、ビット番号 1 (SYN) のみがセットされています。 .PP オクテット番号 13 が、ネットワークバイト順で、 8 ビット符号無し整数と仮定します。 このオクテットの 2 進数値は .IP 00000010 .PP となり、10 進数での表現は次のようになります: .PP .nf 7 6 5 4 3 2 1 0 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2 .fi .PP SYN のみセットされている場合について理解したので、これでほとんど終りです。 TCP ヘッダの第 13 オクテットの値は、 ネットワークバイト順の 8 ビット符号無し整数として解釈すると、 正確に 2 となります。 .PP この関係は次のように表現可能です: .RS .B tcp[13] == 2 .RE .PP この式を \fItcpdump\fP のフィルタとして使用し、 SYN パケットのみを持つパケットを捕捉可能です: .RS .B tcpdump -i xl0 tcp[13] == 2 .RE .PP この式は「TCP データグラムの第 13 オクテットは 10 進数 2 を持つ」 と言っており、まさに我々が望むものです。 .PP 次に、SYN パケットが必要であるが、ACK や他の TCP 制御ビットについては どうでも良い場合を考えます。 SYN-ACK が設定された TCP データグラムが到着した時に オクテット 13 がどうなっているかを見てみましょう: .PP .nf |C|E|U|A|P|R|S|F| |---------------| |0 0 0 1 0 0 1 0| |---------------| |7 6 5 4 3 2 1 0| .fi .PP 今度は、第 13 オクテットの第 1 ビットと第 4 ビットがセットされています。 第 13 オクテットの 2 進数値は .IP 00010010 .PP となり、10 進数では次のようになります: .PP .nf 7 6 5 4 3 2 1 0 0*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18 .fi .PP 今度は、\fItcpdump\fP フィルタ式に 'tcp[13] == 18' を使用できません。 この式は、SYN-ACK がセットされているパケットのみを選択し、 SYN のみセットされているパケットを選択しないからです。 ACK や他の制御ビットがセットされていようといまいと構わないことを 思い出してください。 .PP この目的を達成するために、第 13 オクテットと他の値との論理 AND を取り、 SYN ビットを得ることが必要です。 我々が欲しいのはどんな場合でも SYN がセットされていれば良いので、 第 13 オクテットと SYN の 2 進数値との論理 AND を取ります: .PP .nf 00010010 SYN-ACK 00000010 SYN AND 00000010 (SYN が欲しい) AND 00000010 (SYN が欲しい) -------- -------- = 00000010 = 00000010 .fi .PP この AND 操作は、ACK や他の TCP プロトコルビットが セットされていようといまいと、結果は同じです。 AND 用の値の 10 進数表現と、この操作の結果の 10 進数値は、 共に 2 (2 進数値 00000010) であり、 SYN がセットされているパケットには次の関係が成立します: .IP ( ( 第 13 オクテットの値 ) AND ( 2 ) ) == ( 2 ) .PP ここで、\fItcpdump\fP フィルタ式は次のようになることが分かります: .RS .B tcpdump -i xl0 'tcp[13] & 2 == 2' .RE .PP シングルクォートもしくはバックスラッシュを使用して、AND (&') 特殊文字を シェルから隠す必要があることに注意してください。 .HD .B UDP パケット .LP UDP フォーマットは、以下の rwho パケットで例示します。 .RS .nf .sp .5 \f(CWactinide.who > broadcast.who: udp 84\fP .sp .5 .fi .RE これは、ホスト \fIactinide\fP の \fIwho\fP ポートが UDP データグラムを インターネットブロードキャストアドレスであるホスト \fIbroadcast\fP の \fIwho\fP ポートに対して送信していることを意味します。本パケットは、 84 バイトのユーザデータを含みます。 .LP いくつかの UDP サービスは(始点もしくは終点のポート番号から)種 類の判断が可能で、さらに上位レベルのプロトコル情報が出力されます。 ドメインネームサービス要求 (RFC1034/1035)、そして、Sun RPC 呼びだし (RFC1050) を用いた NFS サービスなどがこの条件に該当します。 .HD UDP ネームサーバ要求 .LP \fI(注意:以下の記述は、RFC1035 に記述されている ドメインサービスプロトコルの知識があることを前提に書かれています。もしこ れらの知識がない場合には、以下の記述は未知の言語で書かれているかのよう に見えるでしょう。)\fP .LP ネームサーバ要求は、以下のような表示になります。 .RS .nf .sp .5 \fIsrc > dst: id op? flags qtype qclass name (len)\fP .sp .5 \f(CWh2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)\fR .sp .5 .fi .RE ホスト \fIh2opolo\fP は、\fIhelios\fP 上のドメインサーバに対して \fIucbvax.berkeley.edu\fP のホスト名に対応するアドレスレコード (qtype=A) を問い合わせています。 問い合わせの ID は `3' であり、`+' は\fI再帰要求\fPフラグが設定されて いることを意味します。問い合わせの長さは 37 バイトであり、この中に UDP および IP のプロトコルヘッダの長さは含みません。質問操作は普通の操作 (\fIQuery\fP) であり、op フィールドは省略されます。op が他のいずれかであった場合、 その op は `3' と `+' の間に表示されます。 これと同様に、qclass は普通のもの (\fIC_IN\fP) であり、省略されます。 他の qclass が入った場合、`A' の直後に表示されます。 .LP 少数の変則的なパケットは検査され、カギカッコで囲まれた付加 フィールドにその結果が表示されます。問い合わせに返答が あったとき、オーソリティレコードもしくは追加レコードのセクション .IR ancount , .IR nscount , .I arcount のいずれかが、`[\fIn\fPa]', `[\fIn\fPn]', `[\fIn\fPau]' のような形式で 表示されます。\fIn\fP は、それぞれの個数です。 応答ビットのいずれかが設定されている (AA, RA, rcode のいずれか) 場合、 もしくは「0 でなければならない」ビットが 2 バイト目と 3 バイト目に設定されてい る場合には、`[b2&3=\fIx\fP]' が出力されます。\fIx\fP は、ヘッダの 2 バイト 目および 3 バイト目の値を 16 進で表したものです。 .HD UDP ネームサーバ応答 .LP ネームサーバ応答の形式は、以下の通りです。 .RS .nf .sp .5 \fIsrc > dst: id op rcode flags a/n/au type class data (len)\fP .sp .5 \f(CWhelios.domain > h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273) helios.domain > h2opolo.1537: 2 NXDomain* 0/1/0 (97)\fR .sp .5 .fi .RE 最初の例は、\fIh2opolo\fP からの質問 ID 3 の要求に対し、\fIhelios\fP が 3 つのアンサーレコード、3 つのネームサーバレコード、そして 7 つの 追加レコードを持っているパケットで返答しているというものです。 最初のアンサーレコードは、タイプ A (アドレス) であり、そのデータは IP アドレス 128.32.137.3 です。UDP と IP のヘッダを除いた総サイズは 273 バイトです。 A レコードのクラス (C_IN) と同様に, op (Query) および応答コード (NoError) は、省略されます。 .LP 2 つめの例は、\fIhelios\fP が質問 ID 2 の要求に対し、存在しない ドメイン (NXDomain) という返答コードとともに、0 個のアンサーレコード、1 つ のネームサーバレコード、そして 0 個のオーソリティレコードを含んだ レスポンスを返しています。`*' は、\fIauthoritative answer\fP ビットが設定され ていることを示します。 アンサーレコードがないため、型、クラス、データは出力されません。 .LP 出力される可能性のある他のフラグキャラクタは、`\-' (再帰利用,RA,が 設定されていない)および `|' (メッセージ切捨て, TC, が設定されている) です。 `question' セクションに含まれるエントリがちょうど 1 つでない場合には、 `[\fIn\fPq]' が出力されます。 .LP ネームサーバ要求および応答は、大きくなる傾向にあり、デフォルトの \fIsnaplen\fP の値である 68 バイトの長さは、パケットを捕捉してその内容を 表示するには十分でないかも知れないことに注意して下さい。 もしネームサーバトラフィックの調査を真剣に 行なおうとするならば、\fB\-s\fP オプションを用いて、\fIsnaplen\fP を増やし て下さい。自分の経験上、`\fB\-s 128\fP' で十分使い物になります。 .HD SMB/CIFS のデコード .LP 現在の \fItcpdump\fP は、UDP/137, UDP/138, TCP/139 上のデータ用に、 非常に多くの SMB/CIFS/NBT デコードを含みます。 IPX および NetBEUI SMB データの原始的なデコードも、 いくらかは実装されています。 デフォルトでは、最小限のデコードが行われ、 より詳細なデコードは -v を指定すると行われます。 -v を使用すると、単一の SMB パケットが 1 ページ以上を占めてしまいますので、 血まみれの詳細すべてが本当に欲しい場合のみに -v を使用すべきことを 注意してください。 UNICODE 文字列を含む SMB セッションをデコードする場合、 環境変数 USE_UNICODE を 1 に設定するとよいかもしれません。 UNICODE 文字列を自動検出するパッチを歓迎します。 SMB パケット書式の情報とすべてのフィールドの意味については、 www.cifs.org または好きな samba.org ミラーサイトの pub/samba/specs/ ディレクトリを見てください。 SMB パッチは Andrew Tridgell (tridge@samba.org) が書きました。 .HD NFS 要求と応答 .LP Sun NFS (Network File System) 要求および応答は、以下のように 表示されます。 .RS .nf .sp .5 \fIsrc.xid > dst.nfs: len op args\fP \fIsrc.nfs > dst.xid: reply stat len op results\fP .sp .5 \f(CW sushi.6709 > wrl.nfs: 112 readlink fh 21,24/10.73165 wrl.nfs > sushi.6709: reply ok 40 readlink "../var" sushi.201b > wrl.nfs: 144 lookup fh 9,74/4096.6878 "xcolors" wrl.nfs > sushi.201b: reply ok 128 lookup fh 9,74/4134.3150 \fR .sp .5 .fi .RE 最初の行では、ホスト \fIsushi\fP が ID\fI6709\fP のトランザクションを \fIwrl\fP に送信します (始点ホストに続く数字はトランザクション ID であり、始点ポート番号で\fIない\fPことに注意して下さい)。要求 サイズは、UDP および IP ヘッダのサイズを除いて 112 バイトです。操作は、 ファイルハンドル (\fIfh\fP) 21,24/10.731657119 に対する \fIreadlink\fP (シンボリックリンク読み込み) です。 (この例のように運が良ければ、ファイルハンドルはデバイスのメジャー、 マイナー番号のペアと、それに続く inode 番号と世代番号と解釈することがで きます。) \fIwrl\fP はリンクの内容とともに `ok' と返答しています。 .LP 3 行めでは、\fIsushi\fP は \fIwrl\fP に対し、ファイルハンドル 9,74/4096.6878 のディレクトリ中の `xcolors' ファイルの検索を要求していま す。出力されたデータは、操作の型に依存することに注意して下さい。本形式 は、NFS のプロトコル仕様とともに読めば、それ自身を見れば分かるよう に意図して作成されています。 .LP \-v (verbose, 冗長) フラグがある場合、追加情報が出力されます。 例えば .RS .nf .sp .5 \f(CW sushi.1372a > wrl.nfs: 148 read fh 21,11/12.195 8192 bytes @ 24576 wrl.nfs > sushi.1372a: reply ok 1472 read REG 100664 ids 417/0 sz 29388 \fP .sp .5 .fi .RE (\-v は IP ヘッダの TTL と ID と長さとフラグメンテーションフィールドも出力し ますが、この例では省略しています。) 最初の行では、\fIsushi\fP は \fIwrl\fP に対してファイル 21,11/12.195 のオフセット 24576 バイト目か ら 8192 バイトを読むように要求しています。\fIwrl\fP は `ok' と返答してい ます。2 行めに示したパケットは応答の最初のフラグメントなので、1472 バイトしかありません (その他のデータは継続するフラグメント中に続きます が、これらのフラグメントは NFS ヘッダも UDP ヘッダさえも持たないので、使わ れるフィルタリングの表現によっては出力されないでしょう)。\-v フラグがあ るのでいくつかのファイル属性 (ファイルデータに追加されて返されてくる) が 出力されます。それらはファイルの型 (普通のファイルなら ``REG'')、(8 進数 表現の) ファイルモード、uid と gid、そしてファイルの大きさです。 .LP \-v フラグが 2 回以上指定されると、さらに詳しい情報が出力されます。 .LP NFS 要求は非常に大きなデータになるため、\fIsnaplen\fP を大きくし ないと詳しい出力は得られません。NFS トラフィックを監視するには、 `\fB\-s 192\fP' と指定してみて下さい。 .LP NFS 応答パケットは RPC 操作であることを明示的には示しません。その代わ り、\fItcpdump\fP は「最近の」要求を追跡して、トランザクション ID を用い て応答と照合します。応答が対応する要求のすぐ後に続かないと、解 析することはできません。 .HD AFS の要求と応答 .LP Transarc AFS (Andrew File System) の要求と応答は次のように表示されます: .HD .RS .nf .sp .5 \fIsrc.sport > dst.dport: rx packet-type\fP \fIsrc.sport > dst.dport: rx packet-type service call call-name args\fP \fIsrc.sport > dst.dport: rx packet-type service reply call-name args\fP .sp .5 \f(CW elvis.7001 > pike.afsfs: rx data fs call rename old fid 536876964/1/1 ".newsrc.new" new fid 536876964/1/1 ".newsrc" pike.afsfs > elvis.7001: rx data fs reply rename \fR .sp .5 .fi .RE 最初の行では、ホスト elvis が RX パケットを pike に送っています。 これは、fs (ファイルサーバ) サービスへの RX データパケットであり、 RPC 呼び出しの開始です。 この RPC 呼び出しはリネーム (改名) であり、 古いディレクトリファイル ID 536876964/1/1 と古いファイル名 `.newsrc.new'、 新しいディレクトリファイル ID 536876964/1/1 と新しいファイル名 `.newsrc' で 呼び出しています。 ホスト pike は、RPC 応答をリネーム呼び出しに対して返します (データパケットであり、アボートパケットではないため、これは成功しました)。 .LP 一般的には、AFS RPC の RPC 呼び出し名だけは最低限デコードされます。 -ほとんどの AFS RPC は、少ななくともいくらかの引数がデコードされます +ほとんどの AFS RPC は、少なくともいくらかの引数がデコードされます (一般的には「興味のある」引数のみであり、興味についてはある定義によります)。 .LP 書式は、自明となることを意図していますが、 AFS および RX の動作に親しみのない方々にとっては有用ではないかもしれません。 .LP -v (冗長) フラグを 2 度指定すると、 確認応答パケットと追加のヘッダ情報を表示します。 これは、RX 呼び出し ID、呼び出し番号、シーケンス番号、 シリアル番号、RX パケットフラグといったものです。 .LP -v フラグを 2 度指定すると、追加情報が表示されます。 これは、RX 呼び出し ID、呼び出し番号、RX パケットフラグといったものです。 MTU ネゴシエーション情報も、RX 確認応答パケットから表示されます。 .LP -v フラグを 3 度指定すると、 セキュリティインデックスとサービス ID を表示します。 .LP アボートパケットに対しては、エラーコードが表示されます。 ただし、Ubik ビーコンパケットは例外です (Ubik プロトコルでは、アボートパケットは、肯定投票に使用されるからです)。 .LP AFS 要求は非常に大きく、 \fIsnaplen\fP を増やさなければ多くの引数が表示されないことに注意してください。 AFS トラフィックを見るには `\fB-s 256\fP' を試してみてください。 .LP AFS 応答パケットは、明示的には RPC 操作を識別しません。 代りに \fItcpdump\fP が「最近の」要求の追跡を行い、 応答に対応する要求のマッチングを、 呼び出し番号とサービス ID を使用して行います。 応答パケットが対応する要求パケットに近くないと、 パーズできないかもしれません。 .HD KIP Appletalk (DDP in UDP) .LP UDP データグラムでカプセル化された Appletalk DDP パケットは、カプセル化 を解かれ、DDP パケットとしてダンプされます (全ての UDP ヘッダ情報は破棄 されます)。 ファイル .I /etc/atalk.names が、Appletalk ネットワークおよびノード番号を名前に変換するのに用い られます。 本ファイルの内容は、以下のように記述されます。 .RS .nf .sp .5 \fInumber name\fP \f(CW1.254 ether 16.1 icsd-net 1.254.110 ace\fR .sp .5 .fi .RE 最初の 2 行は、Appletalk ネットワーク名を決めています。3 行めは、 特定のホストの名前を決めています (ホストは、3 オクテット目の有無で ネットワークと区別されます。ネットワーク番号は、2 オクテットの数字 から、ホスト番号は 3 オクテットの数字から構成される必要があります。) 数字と名前は、空白文字もしくはタブ文字で区切られます。この .I /etc/atalk.names ファイルは、空行もしくは、`#' 文字で始まるコメント行を含んでもかま いません。 .LP Appletalk アドレスは、以下のように表示されます。 .RS .nf .sp .5 \fInet.host.port\fP \f(CW144.1.209.2 > icsd-net.112.220 office.2 > icsd-net.112.220 jssmag.149.235 > icsd-net.2\fR .sp .5 .fi .RE (もし、この .I /etc/atalk.names がないか、このファイルの中にホスト番号及びネットワーク番号のエントリが 存在しない場合には、アドレスは数字で表示されます。) 最初の例は、ネットワーク 144.1 の中のノード 209 の NBP (DDP port 2) が、ネットワーク icsd のノード 112 のホストの ポート 220 を開いている何者かにデータを送信しています。 次の行は、1 行めとほぼ同じ例ですが、始点のノード名が既知である (`office') ところが異なります。 3 行目の例は、ネットワーク jssmag のノード 149 のポート 235 から、icsd-net の NBP ポートにブロードキャストでデータ送信をしています (ブロードキャストアドレス (255) は、ホスト番号なしでネットワーク番号のみ が表示されているところでわかります。このことから、/etc/atalk.names では ノード名とネットワーク名を区別する方がよいことが分かります)。 .LP NBP (name binding protocol) および ATP (Appletalk transaction protocol) パケットでは、その内容は解釈されます。 他のプロトコルは、プロトコル名 (もしくは、プロトコルが登録されていない場 合には、プロトコル番号) およびパケットサイズをダンプします。 \fBNBP パケット\fP は、以下のような形式で表示されます。 .RS .nf .sp .5 \s-2\f(CWicsd-net.112.220 > jssmag.2: nbp-lkup 190: "=:LaserWriter@*" jssmag.209.2 > icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@*" 250 techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186\fR\s+2 .sp .5 .fi .RE 最初の行は、レーザライタの名前検索要求であり、ネットワーク icsd のホスト 112 から送られ、ネットワーク jssmag へとブロードキャストされています。 検索のための nbp の ID は 190 です。 次の行は jssmag.209 からの、この要求の応答 (同じ ID を持つことに注意して下さ い) で、 ポート 250 に登録された RM1140 という名前のレーザライタがあると答 えています。 3 行めは、同じ要求に対する他のホストからの応答で、 ホスト techpit が、ポート 186 に登録されたレーザライタ "techpit" を持ってい ると答えています。 \fBATP パケット\fP の形式は、以下のように表示されます。 .RS .nf .sp .5 \s-2\f(CWjssmag.209.165 > helios.132: atp-req 12266<0-7> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:0 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:1 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:2 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:4 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:6 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp*12266:7 (512) 0xae040000 jssmag.209.165 > helios.132: atp-req 12266<3,5> 0xae030001 helios.132 > jssmag.209.165: atp-resp 12266:3 (512) 0xae040000 helios.132 > jssmag.209.165: atp-resp 12266:5 (512) 0xae040000 jssmag.209.165 > helios.132: atp-rel 12266<0-7> 0xae030001 jssmag.209.133 > helios.132: atp-req* 12267<0-7> 0xae030002\fR\s+2 .sp .5 .fi .RE jssmag.209 は、ホスト helios に対し最大8個 ('<0-7>') までのパケットを 要求することで、トランザクション ID 12266 を開始します。行の最後の 16 進数は、 要求の中の「ユーザデータ」のフィールドの値です。 .LP helios は、8 つの 512 バイトのパケットで応答しています。トランザクション ID の後につづく「:数」は、パケットシーケンス番号を、括弧中の数値は ATP ヘッダ を除いたパケット中のデータ量を示しています。パケットシーケンス 7 のところ の `*' は、EOM ビットが設定されていることを示しています。 .LP jssmag.209 は、パケットシーケンス番号 3 と 5 のパケットの再送要求をしています。 helios はそれらを再送し、その後 jssmag.209 はトランザクションを解放します。 最後の行で、jssmag.209 は次の要求を開始します。この要求の表示 で付加されている `*' は、XO (`exactly once') が設定されていないことを示します。 .HD IP フラグメンテーション .LP フラグメントのあるインターネットデータグラムは、以下のように表示されます。 .RS .nf .sp .5 \fB(frag \fIid\fB:\fIsize\fB@\fIoffset\fB+)\fR \fB(frag \fIid\fB:\fIsize\fB@\fIoffset\fB)\fR .sp .5 .fi .RE (最初の形式では、まだフラグメントがあることを示し、2 番めの形式は、 これが最後のフラグメントであることを示しています。) .LP \fIid\fP は、フラグメント ID です。\fIsize\fP は、フラグメントサイズを バイト単位であらわしたものです。ただし IP ヘッダサイズは含みません。 \fIoffset\fP は、元のデータグラムでの本フラグメントのオフセットをバイト 単位であらわしたものです。 .LP フラグメント情報は、各フラグメントごとに表示されます。最初の フラグメントには、上位レベルのプロトコルヘッダが含まれるので、フラグ情 報がプロトコル情報の後に表示されます。2 つ目以降のフラグメントについて は、上位レベルのプロトコルヘッダを含まないので、フラグ情報は始点およ び終点アドレスの後ろに表示されます。 例えば、これは arizona.edu から lbl-rtsg.arpa への CSNET 接続での ftp の様子の一部分ですが、どうやら 576 バイト以上のデータグラムを扱えないよ うです。 .RS .nf .sp .5 \s-2\f(CWarizona.ftp-data > rtsg.1170: . 1024:1332(308) ack 1 win 4096 (frag 595a:328@0+) arizona > rtsg: (frag 595a:204@328) rtsg.1170 > arizona.ftp-data: . ack 1536 win 2560\fP\s+2 .sp .5 .fi .RE 注意すべきことがいくつかあります。まず最初に、2 行目は ポート番号を含みません。これは、TCP プロトコル情報は、最初のフラグメント に全て入っており、後のフラグメントを出力する時にはポート番号やシーケンス 番号を知る術がないからです。 次に、最初の行の TCP シーケンス情報は、パケットが 308 バイトのユーザデータ を持ってるかのように表示されますが、実際には 512 バイトのユーザデータを 持っています (308 バイトが最初のフラグ分で、204 バイトが 2 番目のフラグ分で す)。シーケンススペースの穴をさがしたり、パケットの ack の対応が正しい かをこのデータで見ようとしてはいけません。 .LP フラグメント不可フラグが設定されたパケットは、最後の部分に \fB(DF)\fP と 印が付けられます。 .HD タイムスタンプ .LP デフォルトでは、すべての出力行は最初にタイムスタンプが出力されます。 タイムスタンプは、以下の形式で、現在のクロックタイムを表示します .RS .nf \fIhh:mm:ss.frac\fP .fi .RE そして、クロックの精度は、カーネルクロックの精度に依存します。 タイムスタンプは、カーネルが最初にパケットを見つけた時間を反映します。 イーサネットインタフェースがケーブルからパケットを取り出してカーネルが 「新規パケット」割り込みを受け付けるまでのタイムラグなどは補正されません .SH 関連項目 bpf(4), pcap(3) .SH 作者 元々の作者は次の通りです: .LP Van Jacobson, Craig Leres and Steven McCanne, all of the Lawrence Berkeley National Laboratory, University of California, Berkeley, CA. .LP 現在は tcpdump.org で管理されています。 .LP 現在のバージョンは http で次のところから取得可能です: .LP .RS .I http://www.tcpdump.org/ .RE .LP 元々の配布は匿名 ftp で次のところから取得可能です: .RS .I ftp://ftp.ee.lbl.gov/tcpdump.tar.Z .RE .LP IPv6/IPsec サポートは WIDE/KAME プロジェクトが追加しました。 本プログラムは、特定の構成においては、 Eric Young の SSLeay ライブラリを使用します。 .SH バグ 問題、バグ、希望の機能拡張等については次のところに送ってください: .LP .RS tcpdump-workers@tcpdump.org .RE .LP ソースコードの寄贈等については次のところに送ってください: .LP .RS patches@tcpdump.org .RE .LP NIT では、外に出ていくトラフィックを観察できません。BPF ならできます。 後者を用いることを推奨します。 .LP 2.0[.x] カーネルの Linux システムにおいて: .IP ループバックデバイス上のパケットは 2 度観測されます。 .IP カーネル内でのパケットフィルタリングは不可能であり、 全パケットがカーネルからコピーされてユーザモードでフィルタされます。 .IP スナップショットの長さ部分ではなく、パケット全体が、 カーネルからコピーされます (2.0[.x] のパケット捕捉機構は、 パケットの一部をユーザランドへコピーするように依頼されると、 パケットの正しい長さを報告しません。 このため、ほとんどの IP パケットが .BR tcpdump でエラーとなってしまいます)。 .LP 2.2 以降のカーネルにアップグレードすることをお勧めします。 .LP IP フラグメントを再構成するか、もしくは少なくとも上位プロトコルの正し いデータサイズを計算するように設計しなおす必要があります。 .LP ネームサーバについての逆引きについては、正しくダンプされません。 実際の要求ではなく、(empty) クエスチョンセクションが、 アンサーセクションに出力されます。 逆引きについてはそれ自体がバグであると信じ、 \fItcpdump\fP ではなく逆引きを要求する プログラムを修正するべきと考える人達もいます。 .LP 夏時間との変更の時にパケットトレースを行うと、タイムスタンプは変更後の 時刻とはずれてしまいます (時間変化は無視されます)。 .LP FDDI ヘッダおよび Token Ring ヘッダを操作するようなフィルタの表現においては、 全ての FDDI パケットおよび Token Ring パケットは SNAP でカプセル化された Ethernet パケットであると仮定します。 これは、IP, ARP, DECNET フェーズ 4 については正しいですが、ISO の CLNS 等の プロトコルについては正しくありません。したがって、フィルタ表現に正しく マッチしないようなパケットを偶然に受け入れてしまうことがあります。 .LP Token Ring ヘッダ以外のフィールドに対するフィルタ式は、 始点経路制御された Token Ring パケットを正しく扱わないことがあります。 .LP .BR "ip6 proto" はヘッダチェーンを追跡すべきですが、現在のところはそうなっていません。 このために .BR "ip6 protochain" が提供されています。 .LP 例えば \fBtcp[0]\fP といったトランスポート層ヘッダに対する演算は、 IPv6 パケットに対しては動作しません。 IPv4 パケットだけを見ます。 diff --git a/ja_JP.eucJP/man/man1/texindex.1 b/ja_JP.eucJP/man/man1/texindex.1 index 98296c0ab4..29cf1ed34b 100644 --- a/ja_JP.eucJP/man/man1/texindex.1 +++ b/ja_JP.eucJP/man/man1/texindex.1 @@ -1,49 +1,49 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.29. .TH TEXINDEX "1" "June 2003" "texindex 4.6" "User Commands" .\" $FreeBSD$ .SH 名称 texindex \- Texinfo のインデックスファイルをソート .SH 書式 .B texindex [\fIOPTION\fR]...\fI FILE\fR... .SH 解説 .PP 各 TeX 出力ファイル FILE に対し、ソートされたインデックスを作成します。 通常、FILE... は、 `foo.texi' という文書に対しては `foo.??' と指定します。 .SH オプション .TP \fB\-h\fR, \fB\-\-help\fR このヘルプメッセージを表示して終了します .TP \fB\-k\fR, \fB\-\-keep\fR 処理終了後も一時ファイルを削除しません .TP \fB\-\-no\-keep\fR 処理終了後に一時ファイルを削除します (デフォルト) .TP \fB\-o\fR, \fB\-\-output\fR FILE FILE で指定したファイルに出力します .TP \fB\-\-version\fR バージョン情報を表示して終了します .SH バグ報告 バグの報告は bug-texinfo@gnu.org 宛に電子メールで、 一般的な質問や議論は help-texinfo@gnu.org 宛にお願いします。 Texinfo ホームページ: http://www.gnu.org/software/texinfo/ .SH COPYRIGHT Copyright \(co 2003 Free Software Foundation, Inc. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING. .SH 関連項目 .B texindex に関する全般的な説明は、Texinfo マニュアルとして保守されています。もし .B info 及び .B texindex -が、あなたのサイトに正しくインストールされいれば、 +が、あなたのサイトに正しくインストールされていれば、 .IP .B info texindex .PP とすることで完全なマニュアルにアクセスすることができます。 diff --git a/ja_JP.eucJP/man/man1/troff.1 b/ja_JP.eucJP/man/man1/troff.1 index 4626843a5e..d47643d1c4 100644 --- a/ja_JP.eucJP/man/man1/troff.1 +++ b/ja_JP.eucJP/man/man1/troff.1 @@ -1,700 +1,700 @@ '\" t .ig troff.man Last update : 09 Dec 2002 This file is part of groff, the GNU roff type-setting system. Copyright (C) 1989, 2000, 2001, 2002 Free Software Foundation, Inc. written by James Clark modified by Werner Lemberg Bernd Warken Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHOR, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the Free Documentation License is included as a file called FDL in the main directory of the groff source package. .. . .\" $FreeBSD$ . .\" -------------------------------------------------------------------- .\" Setup .\" -------------------------------------------------------------------- . .mso www.tmac . .if n \{\ . mso tty-char.tmac . ftr CR R . ftr CI I .\" $FreeBSD$ .\} . .if '\*[.T]'dvi' \ . ftr CB CW . .de TQ .br .ns .TP \\$1 .. . .\" Like TP, but if specified indent is more than half .\" the current line-length - indent, use the default indent. .de Tp .ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP .el .TP "\\$1" .. . . .\" -------------------------------------------------------------------- .\" Title .\" -------------------------------------------------------------------- . .TH TROFF 1 "1 May 2003" "Groff Version 1.19" .SH 名称 troff \- groff テキストフォーマットシステムの troff プロセッサ . . .\" -------------------------------------------------------------------- .SH 書式 .\" -------------------------------------------------------------------- . .nr a \n(.j .ad l .nr i \n(.i .in +\w'\fBtroff 'u .ti \niu .B troff .de OP .ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]" .el .RB "[\ " "\\$1" "\ ]" .. .OP \-abcivzCERU .OP \-d cs .OP \-f fam .OP \-F dir .OP \-m name .OP \-M dir .OP \-n num .OP \-o list .OP \-r cn .OP \-T name .OP \-w name .OP \-W name .RI "[\ " files\|.\|.\|. "\ ]" .br .ad \na .P コマンドラインオプションとパラメータの間には、 空白を含めることができます。 . . .\" -------------------------------------------------------------------- .SH 解説 .\" -------------------------------------------------------------------- . 本マニュアルでは、GNU バージョンの .BR troff について記述しています。 これは、groff ドキュメントフォーマットシステムの一部です。 . 本コマンドは UNIX troff と高い互換性を持っている一方で、 多くの拡張がなされています。 この拡張については、 .BR \%groff_diff (7) を参照してください。 通常 troff は .BR groff (1) コマンドから起動されます。 また groff は、適切な前処理プログラムと後処理プログラムを 適切なオプションを用いて、適切な順序で起動します。 . . .\" -------------------------------------------------------------------- .SH オプション .\" -------------------------------------------------------------------- . .TP \w'\-dname=s'u+2n .B \-a .SM ASCII 文字のみの近似的な出力を行います。 . .TP .B \-b 各警告とエラーメッセージに対するバックトレースを表示します。 . これは、警告やエラーの原因を調べるのに有用です。 . 出力される行番号は必ずしも正しくはありません。 .B as や .B am リクエストによって、 .BR troff が行番号を誤認する可能性があるからです。 . .TP .B \-c カラー出力を無効にします (互換モードでは常に無効です)。 . .TP .B \-C 互換モードを有効にします。 . .TP .BI \-d cs .TQ .BI \-d name = s マクロ .I c または .I name を文字列 .IR s と定義します。 .I c は 1 文字のマクロ名です。 . .TP .B \-E .BR troff のエラーメッセージを一切出力しません。 これは、 .B tm や .B tm1 リクエストを用いたマクロパッケージによって標準エラー出力へ表示される メッセージには影響しないことに注意してください。 . .TP .BI \-f fam .I fam をデフォルトのフォントファミリとして使用します。 . .TP .BI \-F dir ディレクトリ (またはディレクトリパス) .I dir 以下のサブディレクトリ .BI dev name .RI ( name は出力デバイス名) を検索し、その中からフォントファイルと .B DESC ファイルを探します。 .I dir は、他のすべてのフォントディレクトリより前に調べられます。 . .TP .B \-i 指定されたファイルをすべて処理したあとに、標準入力を読み取ります。 . .TP .BI \-m name マクロファイル .IB name .tmac\fR を読み取ります。 見つからなければ、かわりに .BI tmac. name を試みます。 . まず最初に .B \-M コマンドラインオプションで指定されたディレクトリ、続いて .B GROFF_TMAC_PATH 環境変数で指定されたディレクトリ、 そして現在のディレクトリ (安全でないモードの場合のみ)、 ホームディレクトリ、/usr/share/tmac/、/usr/share/tmac/、 /usr/share/tmac の順に検索します。 . .TP .BI \-M dir 指定したディレクトリ (またはディレクトリパス) .I dir からマクロファイルを検索します。 . これは他のすべてのマクロディレクトリより前に調べられます。 . .TP .BI \-n num 最初のページ番号を .IR num とします。 . .TP .BI \-o list .IR list で指定したページのみを出力します。 .IR list は、コンマで区切られたページ範囲のリストです: .I n は .IR n ページの出力、 .IB m \- n は .I m ページから .IR n ページまでの出力、 .BI \- n は .IR n ページまでの出力、 .IB n \- は .IR n ページ以降の出力を意味します。 .B troff はリストの最後のページを印刷し終えると終了します。 . .TP .BI \-r cn .TQ .BI \-r name = n 数値レジスタ .I c または .I name の値を .IR n とします。 .I c は 1 文字の名前です。 .I n は troff で扱える数式です。 . .TP .B \-R .B troffrc と .BR troffrc-end を読み取りません。 . .TP .BI \-T name デバイス .IR name 用の出力を生成します。 デフォルトは .BR ps です。 更なる解説は .BR groff (1) を参照してください。 . .TP .B \-U 安全でないモード。 . これによって以下のリクエストが有効になります: .BR open , .BR opena , .BR pso , .BR sy , .BR pi 。 このオプションが指定されない場合、セキュリティのために これらの危険性のあるリクエストは禁止されます。 . またこのオプションによって、現在のディレクトリがマクロ検索パスに追加されます。 . .TP .B \-v バージョン番号を表示します。 . .TP .BI \-w name .IR name で指定した分類の警告を行います。 指定できる警告は、後述の .I 警告 のサブセクションを参照してください。 . 例えば、すべての警告を有効にする場合、 .B \-w .BR all とします。 .B \-w オプションは複数指定できます。 . .TP .BI \-W name .IR name で指定した分類の警告を行いません。 .B \-W オプションは複数指定することができます。 . .TP .B \-z フォーマットした結果を出力しません。 . . .\" -------------------------------------------------------------------- .SH 警告 .\" -------------------------------------------------------------------- . .B troff が出力する警告は以下のカテゴリに分類されます。 . 各警告に関連する名前は .B \-w と .B \-W オプションで使用可能です。 また番号は、 .B warn リクエストおよび .B .warn レジスタが使用します。 番号は、ビット合成しやすいように常に 2 の冪乗となっています。 . .P .TS tab(@), center, box; c c c | c c c r rI lB | r rI lB. ビット@コード@警告@ビット@コード@警告 _ 0@1@char@10@1024@reg 1@2@number@11@2048@tab 2@4@break@12@4096@right-brace 3@8@delim@13@8192@missing 4@16@el@14@16384@input 5@32@scale@15@32768@escape 6@64@range@16@65536@space 7@128@syntax@17@131072@font 8@256@di@18@262144@ig 9@512@mac@19@524288@color .TE . .P .nr x \w'\fBright-brace'+1n+\w'00000'u .ta \nxuR . .TP \nxu+3n .BR break "\t4" 行詰めモードにおいて、行を分割できなかったため、 行の長さよりも短くなりました。 . これはデフォルトで有効です。 . .TP .BR char "\t1" 存在しない文字です。 . これはデフォルトで有効です。 . .TP .BR color "\t524288" 色に関する警告です。 . .TP .BR delim "\t8" 閉じる方のデリミタがないか、もしくはマッチしませんでした。 . .TP .BR di "\t256" 現在転換がないにもかかわらず、引数なしで .B di や .B da を使用しました。 . .TP .BR el "\t16" 対応する .B ie リクエストのない、 .B el リクエストです。 . .TP .BR escape "\t32768" 認識できないエスケープシーケンスです。 . 認識できないエスケープシーケンスがあった場合は、 そのエスケープ文字は無視されます。 . .TP .BR font "\t131072" 存在しないフォントです。 . これはデフォルトで有効です。 . .TP .BR ig "\t262144" .B ig リクエストによって無視されたテキストの中にある、不正なエスケープです。 . これらは、無視されたテキストの中でなければエラーとなっているものです。 . .TP .BR input "\t16384" 不正な入力文字です。 . .TP .BR mac "\t512" 未定義の文字列、マクロ、転換を使用しました。 . 未定義の文字列、マクロ、転換を使用した場合、 その文字列は自動的に空に定義されます。 . このため多くの場合、各名前に対する警告は、たかだか 1 回だけです。 . .TP .BR missing "\t8192" 必要な引数が足りないリクエストです。 . .TP .BR number "\t2" 不正な数式です。 . これはデフォルトで有効です。 . .TP .BR range "\t64" 引数が範囲を越えています。 . .TP .BR reg "\t1024" 未定義の数値レジスタを使用しました。 . 未定義の数値レジスタを使用した場合、 そのレジスタは自動的に値 0 に定義されます。 . このため多くの場合、特定の名前に対する警告は、たかだか 1 回だけです。 . .TP .BR right-brace "\t4096" 数字が期待される場所で .B \[rs]} が使用されました。 . .TP .BR scale "\t32" 意味のないスケールインジゲータです。 . .TP .BR space "\t65536" リクエストもしくはマクロとそれらの引数との間に空白がありません。 . この警告は、最初の 2 文字が定義された名前であるような、 2 文字より長い未定義の名前があった場合に起こります。 . この時、リクエストもしくはマクロは起動されません。 . この警告が発せられる時、どのようなマクロも自動的には定義されません。 . これはデフォルトで有効です。 . この警告は互換モードでは起こりません。 . .TP .BR syntax "\t128" 数式中に疑わしい文法があります。 . .TP .BR tab "\t2048" タブ文字の使い方が不適切です。 数字が期待される場所でタブを使用したか、 -またはクォートされいてないマクロの引数中でタブ文字を使用しました。 +またはクォートされていないマクロの引数中でタブ文字を使用しました。 . .P 警告のグループを指定する名前もあります: . .TP .B all .BR di , .BR mac , .BR reg を除くすべての警告を指定します。 これは、伝統的なマクロパッケージを使用する際に有用な警告の すべてをカバーするよう意図されています。 . .TP .B w すべての警告を指定します。 . . .\" -------------------------------------------------------------------- .SH 環境変数 .\" -------------------------------------------------------------------- . .TP .SM .B GROFF_TMAC_PATH マクロファイルを検索すべきディレクトリ名の、コロン区切りのリストです。 .B troff は、それらの前に .B \-M オプションで指定されたディレクトリを検索し、 次に本環境変数で指定されたディレクトリ、最後に標準のディレクトリ (現在のディレクトリ (安全でないモードの場合)、ホームディレクトリ、 .BR /usr/share/tmac , .BR /usr/share/tmac , .BR /usr/share/tmac ) を検索します。 . .TP .SM .B GROFF_TYPESETTER デフォルトの出力デバイス。 . .TP .SM .B GROFF_FONT_PATH .BI dev name ディレクトリを検索すべきディレクトリ名の、コロン区切りのリストです。 .B troff は、まず .B \-F オプションで指定されたディレクトリを検索し、次に本環境変数で指定された ディレクトリ、最後に標準のディレクトリ ( .RB ( /usr/share/groff_font , .BR /usr/share/groff_font , .BR /usr/share/groff_font ) を検索します。 . . .\" -------------------------------------------------------------------- .SH 関連ファイル .\" -------------------------------------------------------------------- . .Tp \w'/usr/share/groff_font/devname/DESC'u+3n .B /usr/share/tmac/troffrc 初期化ファイル (他のマクロパッケージの前に呼び出されます) . .TP .B /usr/share/tmac/troffrc-end 初期化ファイル (他のマクロパッケージの後に呼び出されます) . .TP .BI /usr/share/tmac/ name .tmac .TQ .BI /usr/share/tmac/tmac. name マクロファイル . .TP .BI /usr/share/groff_font/dev name /DESC デバイス .IR name 用のデバイス記述ファイル . .TP .BI /usr/share/groff_font/dev name / F デバイス .IR name のフォント .I F 用のフォント記述ファイル .P .B troffrc と .B troffrc-end は、セキュリティのためデフォルトでは ( .B \-U オプションが指定されていても) 現在のディレクトリと ホームディレクトリのどちらからも検索されない事に注意してください。 . 必要な場合は、 .B \-M コマンドラインオプションもしくは .B GROFF_TMAC_PATH 環境変数を使用することで、これらのディレクトリを検索パスに加えられます。 . . .\" -------------------------------------------------------------------- .SH 作者 .\" -------------------------------------------------------------------- . Copyright (C) 1989, 2001, 2002 Free Software Foundation, Inc. . .P この文書は、FDL (GNU Free Documentation License) バージョン 1.1 か それ以降のものに基づいて配布されています。 . あなたは、システム上に FDL のコピーを受け取っているはずですが、 これは .URL http://www.gnu.org/copyleft/fdl.html "GNU copyleft site" からもオンラインで入手可能です。 この文書は James Clark によって書かれ、 .MTO wl@gnu.org "Werner Lemberg" と .MTO bwarken@mayn.de "Bernd Warken" によって修正されました。 . .P この文書は GNU の roff ディストリビューションである .IR groff の一部です。 . . .\" -------------------------------------------------------------------- .SH 関連項目 .\" -------------------------------------------------------------------- . .TP .BR groff (1) .I groff システムの主要プログラムです。 これは .IR troff を包むラッパとなっています。 . .TP .BR groff (7) .I groff 言語の説明です。 これには、素の .IR groff の持つすべての定義済みのリクエスト、レジスタ、エスケープについての 簡潔ですが完全なリファレンスが含まれています。 コマンドラインからは、以下のように呼び出します。 .RS .IP .B man 7 groff .RE . .TP .BR \%groff_diff (7) .I groff 言語と .I 古典的な troff 言語の違いです。 . 現在のところ、これが .I groff システムで実際の文書そのものです。 . .TP .BR roff (7) .I groff や他の .I roff システムの概要です。 これにはさらなる関連文書へのポインタも含まれています。 . .P .I groff info .IR ファイル ( .BR info (1) を参照) は、1 文書で groff のすべての説明をしています。 . . .\" -------------------------------------------------------------------- .\" Emacs variables .\" -------------------------------------------------------------------- . .\" Local Variables: .\" mode: nroff .\" End: diff --git a/ja_JP.eucJP/man/man2/mlock.2 b/ja_JP.eucJP/man/man2/mlock.2 index 27a02636a4..472de217d0 100644 --- a/ja_JP.eucJP/man/man2/mlock.2 +++ b/ja_JP.eucJP/man/man2/mlock.2 @@ -1,166 +1,166 @@ .\" Copyright (c) 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)mlock.2 8.2 (Berkeley) 12/11/93 .\" %FreeBSD: src/lib/libc/sys/mlock.2,v 1.14 2002/12/19 09:40:25 ru Exp % .\" .\" $FreeBSD$ .Dd June 2, 1993 .Dt MLOCK 2 .Os .Sh 名称 .Nm mlock , .Nm munlock .Nd 物理ページをメモリ内でロック (アンロック) する .Sh ライブラリ .Lb libc .Sh 書式 .In sys/mman.h .Ft int .Fn mlock "const void *addr" "size_t len" .Ft int .Fn munlock "const void *addr" "size_t len" .Sh 解説 .Fn mlock システムコールは、 .Fa addr から開始する .Fa len バイトの仮想アドレス範囲に対応する物理ページをメモリにロックします。 .Fn munlock システムコールは、1 つ以上の .Fn mlock 呼び出しによってロックされていたページをアンロックします。 これらの両方において、 .Fa addr 引数はページサイズの整数倍でなければいけません。 .Fa len 引数がページサイズの整数倍でない場合、切り上げられます。 範囲全体が確保されている必要があります。 .Pp .Fn mlock システムコールの後、指示されたページは、アンロックされるまで 非常駐ページフォルトもアドレス変換フォルトも起こしません。 しかし、TLB の管理をソフトウェアで実装しているアーキテクチャでは、 保護違反フォルト、または TLB ミスフォルトを起こす可能性はあります。 ページに関するすべてのロックされたマッピングが削除されるまで 物理ページはメモリに留まります。 複数のプロセスが、それぞれの仮想アドレスマッピングから 同じ物理ページをロックする可能性があります。 同様に、1 つのプロセスが同じページに対する異なる複数の 仮想マッピングによって、または同じアドレス範囲へのネストした .Fn mlock 呼び出しによって、ページを多重にロックする可能性があります。 アンロックは、 .Fn munlock によって明示的に、または .Fn munmap によって暗黙的に行われます。 .Fn munmap はマップされていないアドレス範囲の割り当てを解除します。 ロックされたマッピングは .Xr fork 2 による子プロセスには継承されません。 .Pp 物理メモリは潜在的に乏しいリソースなので、プロセスは どのくらいロックできるかの制限を受けます。 -1 つのプロセスは、システム全体に共通の ``固定されたぺージ'' 限界、 +1 つのプロセスは、システム全体に共通の ``固定されたページ'' 限界、 またはプロセスごとの .Li RLIMIT_MEMLOCK リソース限界のいずれか小さい方の値まで .Fn mlock できます。 .Pp これらの呼び出しが利用できるのはスーパユーザだけです。 .Sh 戻り値 .Rv -std .Pp 呼び出しが成功すると、範囲内のすべてのページがロック (アンロック) されます。 失敗した場合は、範囲内のすべてのページのロック状態は変更されません。 .Sh エラー .Fn mlock システムコールは次の場合に処理を失敗します: .Bl -tag -width Er .It Bq Er EPERM 呼び出し側がスーパユーザではありません。 .It Bq Er EINVAL 指定されたアドレスがページ境界に整列されていないか、または長さが負です。 .It Bq Er EAGAIN 指示された範囲のロックによって、ロックされたメモリについての システム限界またはプロセスごとの限界を超過してしまいます。 .It Bq Er ENOMEM 指示されたアドレス範囲の一部が割り当てられていません。 ページのフォルト / マッピングでエラーがありました。 .El .Fn munlock システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er EPERM 呼び出し側がスーパユーザではありません。 .It Bq Er EINVAL 指定されたアドレスがページ境界に整列していないか、または長さが負です。 .It Bq Er ENOMEM 指示されたアドレス範囲の一部が割り当てられていません。 指示されたアドレス範囲の一部がロックされていません。 .El .Sh 関連項目 .Xr fork 2 , .Xr mincore 2 , .Xr minherit 2 , .Xr mmap 2 , .Xr munmap 2 , .Xr setrlimit 2 , .Xr getpagesize 3 .Sh バグ Sun の実装と異なり、同じアドレス範囲に関する複数の .Fn mlock 呼び出しに対して、実際にページをアンロックするために対応する数の .Fn munlock 呼び出しが必要です。 つまり .Fn mlock のネストです。 これは実装上の結果であって仕様ではないと考える必要があります。 .Pp プロセスごとのリソースの限界はロックされた仮想メモリの量への制限で、 システム全体に共通の制限はロックされた物理ページの数についてのものです。 このように、2 つの別々のマッピングから同じ物理ページを ロックするとプロセスごとの制限に対しては 2 ページとしてカウントされ、 システム制限では 1 ページだけとしてカウントされます。 .Pp プロセスごとのリソース制限は現時点ではサポートされていません。 .Sh 歴史 .Fn mlock システムコールと .Fn munlock システムコールは .Bx 4.4 ではじめて登場しました。 diff --git a/ja_JP.eucJP/man/man2/semop.2 b/ja_JP.eucJP/man/man2/semop.2 index 2c30d3d6cf..b2934206f5 100644 --- a/ja_JP.eucJP/man/man2/semop.2 +++ b/ja_JP.eucJP/man/man2/semop.2 @@ -1,277 +1,277 @@ \" .\" Copyright (c) 1995 David Hovemeyer .\" .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. .\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" .\" %FreeBSD: src/lib/libc/sys/semop.2,v 1.18 2003/01/25 21:27:37 alfred Exp % .\" .\" WORD: atomic 不可分な [POSIX] .\" WORD: adjust on exit 終了時調整 .\" $FreeBSD$ .Dd September 22, 1995 .Dt SEMOP 2 .Os .Sh 名称 .Nm semop .Nd セマフォ集合に対する不可分な操作の配列 .Sh ライブラリ .Lb libc .Sh 書式 .In sys/types.h .In sys/ipc.h .In sys/sem.h .Ft int .Fn semop "int semid" "struct sembuf *array" "size_t nops" .Sh 解説 .Fn semop システムコールは、 .Fa semid が示すセマフォ集合に対して、 .Fa array が示す操作の配列を不可分に実行します。 .Fa array の長さは .Fa nops で示します。 各操作は .Vt "struct sembuf" 内にエンコードされており、 .Fa "struct sembuf" は次のように定義されます: .Bd -literal .\" .\" From .\" struct sembuf { u_short sem_num; /* セマフォ番号 */ short sem_op; /* セマフォ操作 */ short sem_flg; /* 操作フラグ */ }; .Ed .Pp .Fa array 内の各要素に関し、 .Va sem_op と .Va sem_flg は、集合内のセマフォ番号 .Va sem_num に対して実行される操作を決定します。 指定した操作の動作を変更するために、 .Dv SEM_UNDO と .Dv IPC_NOWAIT の値の論理和 ( .Em OR ) を取って .Va sem_flg メンバに入れることが可能です。 .Pp 実行される操作は次のように .Va sem_op の値に依存します: .\" .\" This section is based on the description of semop() in .\" Stevens, _Advanced Programming in the UNIX Environment_, .\" and the semop(2) description in The Open Group Unix2 specification. .\" .Bl -bullet .It .Va sem_op が正であり、プロセスが別のパーミッションを持っている場合、セマフォの値を .Va sem_op の値だけ増加させます。 .Dv SEM_UNDO を指定した場合、セマフォの終了時調整値を .Va sem_op の値だけ減少させます。 .Va sem_op についての正の値は、一般に、 セマフォに結び付けられた資源をリリースするプロセスに対応します。 .It .Va sem_op が負であり、プロセスが別のパーミッション持っている場合の動作は、 セマフォの現在の値に依存します: .Bl -bullet .It セマフォの現在の値が .Va sem_op の絶対値と等しいかそれより大きい場合、セマフォの値を .Va sem_op の絶対値だけ減少させます。 .Dv SEM_UNDO が指定されている場合、セマフォの終了時調整値を .Va sem_op の絶対値だけ増加させます。 .It セマフォの現在値が .Va sem_op の絶対値より小さい場合、次のどれかが発生します: .\" XXX a *second* sublist? .Bl -bullet .It .Dv IPC_NOWAIT を指定した場合、 .Fn semop は戻り値 .Er EAGAIN でただちに復帰します。 .It それ以外の場合、呼び出し元プロセスは、以下の条件の 1 つが満足されるまで 休眠状態になります: .\" XXX We already have two sublists, why not a third? .Bl -bullet .It .Xr semctl 2 の .Dv IPC_RMID オプションを用いて、他のプロセスがセマフォを削除した場合。 この時 .Fn semop は、戻り値 .Er EIDRM でただちに復帰します。 .It プロセスが、捕らえるべきシグナルを受け取った場合。 この時そのプロセスは、 .Xr sigaction 2 で定義されたように実行を再開します。 .It セマフォの値が .Va sem_op の絶対値以上になった場合。 この条件が真となった時、セマフォの値を .Va sem_op の絶対値だけ減少させ、セマフォの終了時調整値を .Va sem_op の絶対値だけ増加させます。 .El .El .El .Pp .Va sem_op が負の値であるときは、一般に、 資源が利用可能になるのをプロセスが待っているということです。 .It .Va sem_op が 0 でプロセスが読取り許可を持つ場合、次のどれかが発生します: .Bl -bullet .It 現在のセマフォの値が 0 の場合、 .Fn semop はただちに復帰します。 .It .Dv IPC_NOWAIT が指定された場合、 .Fn semop は戻り値 .Er EAGAIN でただちに復帰します。 .It それ以外の場合、呼び出し元プロセスは、以下の条件の 1 つが満足されるまで 休眠状態になります: .\" XXX Another nested sublists .Bl -bullet .It .Xr semctl 2 の .Dv IPC_RMID オプションを用いて、他のプロセスがセマフォを削除した場合。 この時 .Fn semop は、戻り値 .Er EIDRM でただちに復帰します。 .It プロセスが、捕らえるべきシグナルを受け取った場合。 この時そのプロセスは、 .Xr sigaction 2 で定義されたように実行を再開します。 .It セマフォの値が 0 となった場合。 .El .El .El .Pp プロセスが使用しているセマフォごとに、カーネルは、先に述べたように .Dq 終了時調整 値を保持します。 自発的であれ非自発的にであれ、プロセスが終了するときには、 各セマフォに対する終了時調整値がセマフォの値に追加されます。 これを、プロセスが予期せず終了してしまう場合に 資源を必ず解放することを保証するのに使用可能です。 .Sh 戻り値 .Rv -std semop .Sh エラー .Fn semop システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er EINVAL .Fa semid に対応するセマフォ集合がないか、システムで定義されるプロセス毎の .Dv SEM_UNDO 構造体の数の制限が超過しました。 .It Bq Er EACCES 操作とセマフォ集合のモードの間で不一致があるため、 パーミッションが拒否されました。 .It Bq Er EAGAIN セマフォはそのプロセスを休眠状態に移行させる値ですが、 .Dv IPC_NOWAIT が指定されました。 .It Bq Er E2BIG あまりに多くの操作が指定されました。 .Bq Dv SEMOPM .It Bq Er EFBIG .\" .\" I'd have thought this would be EINVAL, but the source says .\" EFBIG. .\" .Va sem_num が集合に対する有効なセマフォの範囲内にありませんでした。 .It Bq Er EIDRM セマフォの組は、システムから削除されました。 .It Bq Er EINTR .Fn semop -システムコールは、シグナルよって中断されました。 +システムコールは、シグナルによって中断されました。 .It Bq Er ENOSPC システムの .Dv SEM_UNDO プール .Bq Dv SEMMNU が、いっぱいになりました。 .It Bq Er ERANGE 要求された操作によって、現在のセマフォの値 .Bq Dv SEMVMX 、もしくはその終了時調整値 .Bq Dv SEMAEM が、システムによって課されている限界を越えようとしています。 .El .Sh 関連項目 .Xr semctl 2 , .Xr semget 2 , .Xr sigaction 2 .Sh バグ .Fn semop システムコールは、 .Dv IPC_NOWAIT が指定されていてもメモリ待ちでブロックすることがあります。 diff --git a/ja_JP.eucJP/man/man3/getvfsent.3 b/ja_JP.eucJP/man/man3/getvfsent.3 index 1d6ca7e642..231fb70fa4 100644 --- a/ja_JP.eucJP/man/man3/getvfsent.3 +++ b/ja_JP.eucJP/man/man3/getvfsent.3 @@ -1,191 +1,191 @@ .\" %FreeBSD: src/lib/libc/gen/getvfsent.3,v 1.17.2.5 2001/12/14 18:33:51 ru Exp % .\" Written by Garrett A. Wollman, September 1994. .\" This manual page is in the public domain. .\" .\" $FreeBSD$ .Dd September 24, 1994 .Dt GETVFSENT 3 .Os .Sh 名称 .Nm getvfsent , .Nm setvfsent , .Nm endvfsent , .Nm vfsisloadable , .Nm vfsload .Nd 仮想ファイルシステムモジュールを管理 .Sh ライブラリ .Lb libc .Sh 書式 .In sys/param.h .In sys/mount.h .Ft struct ovfsconf * .Fn getvfsent "void" .Ft void .Fn setvfsent "int cachelist" .Ft void .Fn endvfsent "void" .Ft int .Fn vfsisloadable "const char *name" .Ft int .Fn vfsload "const char *name" .Sh 解説 .Fn getvfsent 関数によって、カーネルが管理するインストール済の仮想ファイルシステムモジュール のリストに、簡単にアクセスできます。リストのファイルシステムを 1 回に 1 つづつ段階的に処理します。利用できるデータがそれ以上なくなると、 ヌル ポインタが返ります。構造体 .Dq Li struct ovfsconf のフィールドは次のとおりです。 .Pp .Bl -tag -compact -width vfc_refcount .It vfc_name ファイルシステムの名前。 .It vfc_index カーネルによって割り当てられ .Xr mount 2 の呼び出しに使用された、ファイルシステムのタイプ番号。 .It vfc_refcount このファイルシステムの参照数 (通常はマウント数ですが、 アンロードできないかカーネルに静的にリンクされている ファイルシステムでは、マウント数に 1 を加えたものになります)。 .It vfc_flags フラグビット。 .El .Pp フラグは次のように定義されています: .Pp .Bl -tag -width VFCF_SYNTHETIC -compact .It Dv VFCF_STATIC カーネルに静的に組み込まれている .It Dv VFCF_NETWORK データをネットワーク経由で取得し得る .It Dv VFCF_READONLY 書き込みは未実装 .It Dv VFCF_SYNTHETIC データは実ファイルを表現しない .It Dv VFCF_LOOPBACK マウント済みのファイルシステムに対する別名 .It Dv VFCF_UNICODE ファイル名を Unicode で格納 .El .Pp .Fn setvfsent および .Fn endvfsent 関数は、 .Xr sysctl 3 -のよってカーネル +によってカーネル からまとめて取得されるファイルシステムリストの、キャッシング制御に 使用されます。 .Fn setvfsent の .Fa cachelist パラメータが 0 でなければ、これら 検索関数のどれかを最初に呼び出した時点でリストはただ 1 回だけ取り出され、 キャッシュをクリアするために .Fn endvfsent が呼び出されるまで保持されます。 一般に .Fn setvfsent 1 は、 .Fn getvfsent を使用するプログラムによって呼び出される必要があり、 .Fn setvfsent 0 は (これもデフォルトの状態で)、 .Fn vfsload 関数を使用するプログラムによって呼び出される必要があります。 .Pp .Fn vfsisloadable 関数は、後で .Fn vfsload name の呼び出しが続きそうだと非 0 値を返します。ここで .Dq そう と言うのは、 .Fn vfsisloadable は .Fn vfsload が成功するための条件をチェックしないからです。 .Pp .Fn vfsload 関数は、ファイルシステム .Fa name の実装カーネルモジュールをロード しようと試みます。ファイルシステムモジュールを無事に突き止めてロードした 場合は 0 が、その他の場合は非 0 が返ります。この関数を呼び出せるのは次に 示す状況だけです。 .Bl -enum .It .Fn getvfsbyname を呼び出して非 0 値が返った場合。 .It .Fn vfsisloadable を呼び出して非 0 値が返った場合。 .El .Pp .Xr mount_cd9660 8 のソースから取った使用例を次に示します。 .Bd -literal -offset indent struct vfsconf *vfc; int error; /* ここにセットアップコードが入る */ error = getvfsbyname("cd9660", &vfc); if (error && vfsisloadable("cd9660")) { if (vfsload("cd9660")) err(EX_OSERR, "vfsload(cd9660)"); endvfsent(); /* flush cache */ error = getvfsbyname("cd9660", &vfc); } if (error) errx(1, "cd9660 filesystem is not available"); if (mount(vfc.vfc_name, dir, mntflags, &args) < 0) err(1, NULL); .Ed .Sh 戻り値 .Fn getvfsent ルーチンは、成功すると静的データ構造体のポインタを、失敗すると ヌル ポインタを返します。原因が .Xr sysctl 3 または .Xr malloc 3 で失敗した場合は、 .Va errno がそれら関数用にドキュメントされた値の 1 つに 設定されることがあります。その他の場合 .Va errno は改変されません。 .Pp .Fn vfsload 関数は失敗すると非 0 値を、成功すると 0 を返します。 .Fn vfsload が失敗した場合、 .Xr kldload 2 用に記述された .Va errno 値が設定され得ます。 .Sh 関連項目 .Xr kldload 2 , .Xr mount 2 , .Xr mount 8 .Sh 作者 .An -nosplit このロード可能ファイルシステムサポートは、 .An Terry Lambert による汎用のロード可能カーネルモジュールサポートをベースに、 .An Garrett A. Wollman によって書かれました。 .Sh 歴史 .Fn getvfsent 関数ファミリは .Fx 2.0 ではじめて登場しました。 diff --git a/ja_JP.eucJP/man/man3/regex.3 b/ja_JP.eucJP/man/man3/regex.3 index b69695e75f..b806e70557 100644 --- a/ja_JP.eucJP/man/man3/regex.3 +++ b/ja_JP.eucJP/man/man3/regex.3 @@ -1,486 +1,486 @@ .\" Copyright (c) 1992, 1993, 1994 Henry Spencer. .\" Copyright (c) 1992, 1993, 1994 .\" The Regents of the University of California. All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" Henry Spencer. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)regex.3 8.4 (Berkeley) 3/20/94 .\" .\" $FreeBSD$ .TH REGEX 3 "March 20, 1994" .de ZR .\" one other place knows this name: the SEE ALSO section .IR re_format (7) \\$1 .. .SH 名称 regcomp, regexec, regerror, regfree \- 正規表現ライブラリ .SH 書式 .ft B .\".na #include .br #include .HP 10 int regcomp(regex_t\ *preg, const\ char\ *pattern, int\ cflags); .HP int\ regexec(const\ regex_t\ *preg, const\ char\ *string, size_t\ nmatch, regmatch_t\ pmatch[], int\ eflags); .HP size_t\ regerror(int\ errcode, const\ regex_t\ *preg, char\ *errbuf, size_t\ errbuf_size); .HP void\ regfree(regex_t\ *preg); .\".ad .ft .SH 解説 このルーチンは、POSIX 1003.2 正規表現(``RE'')を実現しています。 .ZR を参照してください。 .I regcomp は、内部フォームにストリングとして書き込まれた RE をコンパイルします。 .I regexec は、その内部フォームをストリングと突き合わせて結果を報告します。 .I regerror は、エラーコードを人が判読できるメッセージに変換します。 .I regfree は、RE の内部フォームで使用される、 ダイナミックに割り振られた記憶域を解放します。 .PP ヘッダ .I は、コンパイルされた内部フォーム用の .I regex_t, および突き合わせの報告用の .I regmatch_t という、2 つの構造体タイプを宣言します。4 つの関数、タイプ .I regoff_t, 名前が ``REG_'' で始まる定数の数も宣言します。 .PP .I Regcomp は、 .IR cflags のフラグに従って、 .I pattern ストリングに含まれる正規表現をコンパイルし、 .IR preg が指す .I regex_t 構造体に結果を配置します。 .I cflags は、ゼロ個以上の以下のフラグでビットワイズ論理和を取ったものです。 .IP REG_EXTENDED \w'REG_EXTENDED'u+2n デフォルトの古い ( ``基本'' ) RE の代わりに、新しい ( ``拡張'' ) RE を コンパイルします。 .IP REG_BASIC 0 のシノニムです。 REG_EXTENDED に対して提供されたもので、読みやすさを改善します。 .IP REG_NOSPEC すべての特殊文字が無効になっていることを認識して コンパイルします。すべてのキャラクタは通常文字とみなされるので、 ``RE'' はリテラルストリングになります。これは、POSIX 1003.2 と 互換性があるが指定されていないエクステンションです。 他のシステムに移植することを目的としたソフトウェアでは 注意して使用してください。REG_EXTENDED と REG_NOSPEC は、 .I regcomp の呼び出しで同時には使用できません。 .IP REG_ICASE 大文字と小文字を区別しないマッチング用にコンパイルします。 .ZR を参照してください。 .IP REG_NOSUB 一致したものではなく、問題の有無のレポートのみが必要な マッチング用にコンパイルします。 .IP REG_NEWLINE 改行を考慮するマッチング用にコンパイルします。 デフォルトの場合、改行は、RE とストリングで特殊な意味がない、完全な 通常文字です。このフラグを使用すると、ブランケット `[^' と `.' は改行と 一致しなくなります。アンカ `^' は、通常関数に加え、ストリングの改行の 後ろにある NULL ストリングと一致するようになります。アンカ `$' は、 通常関数に加え、ストリングの改行の前にある NULL ストリングと 一致するようになります。 .IP REG_PEND 最初の NULL ではなく、 .IR preg が指す構造体の .I re_endp メンバが指すキャラクタの直前で正規表現が終わるようになります。 .I re_endp メンバのタイプは .IR const\ char\ * です。このフラグは、RE に NULL が含まれることを許可します。 この NULL は、通常文字とみなされます。これは、POSIX 1003.2 と 互換性があるが指定されていないエクステンションです。他のシステムへの移植を 目的としたソフトウェアでは注意して使用してください。 .PP 問題がない場合、 .I regcomp は 0 を戻し、 .I preg が指す構造体にデータを入れます。 この構造体の 1 つのメンバ ( .IR re_endp 以外 ) は公表されます。 .IR size_t タイプの .IR re_nsub には、RE の括弧で囲まれたサブ表現の数が入ります ( REG_NOSUB フラグを 使用した場合、このメンバの値は不定になります ) 。 .I regcomp でエラーが発生すると、ゼロ以外のエラーコードが戻されます。診断を 参照してください。 .PP .I regexec は、 .I eflags のフラグに従って、 .I preg が指すコンパイル済み RE を .IR string と突き合わせ、 .IR nmatch, .IR pmatch, 戻り値を使用して結果を報告します。RE は、これ以前に .IR regcomp を呼び出してコンパイルしておく必要があります。 コンパイルされたフォームは、 .IR regexec を実行しても変更されないので、1 つのコンパイル済み RE を 複数のスレッドで同時に使用できます。 .PP デフォルトの場合、 .I string が指す、NULL で終了するストリングは、 ライン全体から最後の改行を除いたテキストとみなされます。 .I eflags 引数は、ゼロ個以上の以下のフラグでビットワイズ論理和を取ったものです。 .IP REG_NOTBOL \w'REG_STARTEND'u+2n ストリングの最初のキャラクタがラインの最初ではないので、`^' アンカが その前で一致する必要はありません。REG_NEWLINE の改行の動作は影響されません。 .IP REG_NOTEOL ストリングを終了する NULL がラインを終了しないので、`$' アンカが その前で一致する必要はありません。REG_NEWLINE の改行の動作は影響されません。 .IP REG_STARTEND .IR nmatch の値に関係なく、ストリングが \fIstring\fR\ + \fIpmatch\fR[0].\fIrm_so\fR で始まり、最後の NULL が \fIstring\fR\ + \fIpmatch\fR[0].\fIrm_eo\fR に配置されている ( その場所に NULL が実際に存在する必要はない ) と みなされます。 .IR pmatch と .IR nmatch の定義については、下記を参照してください。 これは、POSIX 1003.2 と互換性があるが指定されていないエクステンションです。 他のシステムへの移植を目的としたソフトウェアでは注意して使用してください。 \fIrm_so\fRがゼロ以外であっても、 REG_NOTBOL が暗示されることはありません。 REG_STARTEND はストリングの位置のみに影響し、マッチング方法には 影響しません。 .PP RE かその一部が .IR string のサブストリングと一致する状況で一致するものについては、 .ZR を参照してください。 .PP 通常の場合、 .I regexec は問題がないと 0 を戻し、問題があるとゼロ以外のコード REG_NOMATCH を 戻します。例外的な状況では、ゼロではない、これ以外の エラーコードが戻されることがあります。診断を参照してください。 .PP RE のコンパイルで REG_NOSUB を指定した場合、または .I nmatch が 0 である場合、 .I regexec は .I pmatch 引数を無視します ( REG_STARTEND を指定した場合については下記参照 ) 。 その他の場合、 .I pmatch は .IR regmatch_t タイプの .I nmatch 構造体の配列を指します。このような構造体には、 サブストリングの第 1 キャラクタのオフセットを含む .I rm_so 、およびサブストリングの最後の後ろにある第 1 キャラクタのオフセットを含む .IR rm_eo というメンバが最低でも必要です。 どちらもタイプは .I regoff_t ( 最低でもサイズが .I off_t と .IR ssize_t である、符号付き算術タイプ ) です。オフセットは、 .IR regexec に指定した .I string 引数の最初から計測されます。空のサブストリングは、空のサブストリングに続く キャラクタを示す、等しいオフセットで表現されます。 .PP .I pmatch 配列の 0 番目のメンバには、RE 全体で一致した、 .I string のサブストリングが入ります。残りのメンバは、RE の括弧で囲まれたサブ表現で 一致したサブストリングを報告します。メンバ .I i は、RE の左括弧の次数を左から右に 1 から数えたサブ表現で、サブ表現 .IR i を報告します。突き合わせにまったく関係しなかったサブ表現か RE に存在しない サブ表現 ( つまり、\fIi\fR\ > \fIpreg\fR\->\fIre_nsub\fR) に対応する、 配列の未使用エントリでは、 .I rm_so と .I rm_eo の 両方が \-1 に設定されています。サブ表現が突き合わせに複数回関係した場合は、 一致した最後のサブストリングが報告されます ( RE `(b*)+' が `bbb' と 一致する場合、括弧に囲まれたサブ表現は、3 つそれぞれの `b' 、 および最後の `b' に続く無限の空ストリングと一致するため、 報告されるサブストリングは空のうちの 1 つになります ) . .PP REG_STARTEND を指定した場合、 .I pmatch は最低でも 1 つの .I regmatch_t を指し ( .I nmatch が 0 であるか、REG_NOSUB を指定した場合でも )、 REG_STARTEND の入力オフセットを保持する必要があります。出力での使用は、 .IR nmatch で完全に制御されます。 .I nmatch が 0 である場合、または REG_NOSUB を指定した場合、 .IR pmatch [0] の値は、 .IR regexec で問題が発生しなければ変更されません。 .PP .I regerror は、 .I regcomp か .I regexec のゼロでない .I errcode を人間が判読可能で出力できるメッセージにマップします。 .I preg が NULL 以外である場合、エラーコードは、 .IR preg が指す .I regex_t の使用から発生します。エラーコードが .IR regcomp からのものである場合、エラーコードは、その .IR regex_t を使用して 最近実行した .I regcomp の結果となります .IR ( regerror は、 .I regex_t の情報を使用してより詳細なメッセージを提供することがあります ) 。 .I regerror は、NULL で終わるメッセージを .IR errbuf が指すバッファに配置します。NULL を含めたメッセージの長さは、最大で .I errbuf_size バイトに制限されます。 メッセージ全体が収まらない場合は、最後の NULL の前で収まる部分までが 提供されます。どのような場合でも、戻り値は、最後の NULL も含めた、 メッセージ全体を保持するのに必要なバッファサイズになります。 .I errbuf_size が 0 である場合、 .I errbuf は無視されますが、戻り値は正確です。 .PP .I regerror に与えられた .I errcode と REG_ITOA の論理和を最初に取ると、作成される ``メッセージ'' は、 -エラーコードの説明でななく、``REG_NOMATCH'' など、 +エラーコードの説明ではなく、``REG_NOMATCH'' など、 エラーコードの出力可能な名前になります。 .I errcode が REG_ATOI である場合、 .I preg は NULL 以外で、これが指す構造体の .I re_endp メンバは、エラーコードの出力可能な名前を指す必要があります。この場合、 .I errbuf の結果は、エラーコードの数値の十進数になります ( 名前が 認識されない場合は 0 ) 。 REG_ITOA と REG_ATOI は、主にデバッグを目的としたものです。 これは、POSIX 1003.2 と互換性があるが指定されていない エクステンションです。他のシステムへの移植を目的としたソフトウェアでは 注意して使用してください。また試験的なものとみなされているので、 変更されることがあることにも注意してください。 .PP .I regfree は、 .IR preg が指すコンパイル済み RE に関連する、ダイナミックに 割り振られた記憶域を解放します。残った .I regex_t は有効なコンパイル済み RE ではないので、 .I regexec か .I regerror でこれを使用しても結果は不定になります。 .PP このすべての関数は、目次を除くグローバル変数を参照しません。引数が 安全である場合、複数のスレッドで使用しても安全です。 .SH 実装における選択 1003.2 には、``未定義'' と明言する形で、または RE の文法で 禁止されているという形で、システム設計者にゆだねている未決定事項が 数多くあります。このシステムでは、この未決定事項を以下のように 扱っています。 .PP 大文字と小文字を区別するマッチングの定義については、 .ZR を参照してください。 .PP メモリの制限を除けば、RE の長さに制限はありません。メモリの使用量は RE のサイズにだいたい比例しており、制限付きの反復を除いて、RE の複雑さに 大きく左右されることはありません。ほとんどのシステムでメモリが不足する、 反復を使用した短い RE については、バグを参照してください。 .PP 1003.2 で特別な意味 ( このような特別な意味は、 古い [``basic''] RE のみにあります ) が与えられているもの 以外のバックスラッシュキャラクタは、通常文字とみなされます。 .PP 一致しない [ は REG_EBRACK エラーです。 .PP 等価クラスは、括弧で囲まれた表現の範囲を始めたり 終了したりできません。ある範囲の終了点が、他の範囲の 開始点になることはありません。 .PP 制限付き反復の反復数の制限である RE_DUP_MAX は 255 です。 .PP 反復演算子 (?, *, +, 制限) に別の反復演算子を 続けることはできません。反復演算子で表現やサブ表現を始めたり、 `^' か `|' の後に反復演算子を続けたりすることはできません。 .PP 表現やサブ表現の最初か最後に `|' を使用したり、`|' の後に 別の `|' を使用したりすることはできません。たとえば、`|' のオペランドを 空のサブ表現にすることはできません。括弧で囲まれた空のサブ表現 `()' は 許可されており、空のストリングかサブストリングと一致します。空のストリング は、適切な RE ではありません。 .PP 後に数字が続く `{' は、制限付き反復の制限の始まりとみなされます。 この場合は、制限のシンタックスに従う必要があります。後に数字が \fI 続かない\fR `{' は、通常文字とみなされます。 .PP 古い ( ``基本'' ) RE のサブ表現の開始と終了を表す `^' と `$' はアンカ であり、通常文字ではありません。 .SH 関連項目 grep(1), re_format(7) POSIX 1003.2, sections 2.8 (Regular Expression Notation) および B.5 (C Binding for Regular Expression Matching) .SH 診断 以下は、 .I regcomp と .I regexec のゼロでないエラーコードです。 .PP .nf .ta \w'REG_ECOLLATE'u+3n REG_NOMATCH regexec() の一致でエラーが発生 REG_BADPAT 正規表現が正しくない REG_ECOLLATE 照合するエレメントが正しくない REG_ECTYPE キャラクタクラスが正しくない REG_EESCAPE エスケープ以外のキャラクタに \e が付いている REG_ESUBREG バックリファレンス番号が正しくない REG_EBRACK 括弧 [ ] の数が合わない REG_EPAREN 括弧 ( ) の数が合わない REG_EBRACE 括弧 { } の数が合わない REG_BADBR { } の反復数が正しくない REG_ERANGE [ ] のキャラクタ範囲が正しくない REG_ESPACE メモリ不足 REG_BADRPT ?, *, + オペランドが正しくない REG_EMPTY 空の表現かサブ表現 REG_ASSERT ``ありえない''、つまりバグ REG_INVARG 引数が正しくない ( 負の長さのストリングなど ) .fi .SH 歴史 最初の作者は Henry Spencer です。 .BA 4.4 の配布に含めるために変更されました。 .SH バグ アルファリリースであるため、欠陥のあることが知られています。 問題がある場合は報告してください。 .PP 機能的なバグとして知られているものに、国際化のシステムが 不完全であるということがあります。 1003.2 のデフォルトロケールが常に 仮定されるので、そのロケールの照合エレメントなどしか使用できません。 .PP バックリファレンスコードは微妙で、複雑な場合はその正確さに疑問が 残ります。 .PP .I regexec のパフォーマンスは低くなっています。後のリリースでは 改善されますが、 .I nmatch が 0 を越えるとコストがかかり、 1 を越えると状況はさらに悪化します。 .I regexec は、バックリファレンスに多くのコストがかかる場合を除き、 RE の複雑さには大きく影響されません。問題は RE の長さで、 特殊文字を 2 倍として計算し、RE の長さを約 30 キャラクタに 収めると、処理は速くなります。 .PP .I regcomp は、マクロ拡張で制限付き反復を実現しています。制限付き反復には、 数が大きい場合、または制限付き反復がネストされている場合、長い 時間と多くのスペースが必要です。たとえば `((((a{1,100}){1,100}){1,100}){1,100}){1,100}' のような RE では、最終的にほとんどのマシンでスワップスペースが不足します。 .PP はっきりとしないエラー条件へのリスポンスにも問題があるようです。 非常に大きな RE か複雑にネストした制限付き反復で引き起こされる、特定の内部 オーバフローは、適切に処理されないことがあります。 .PP 1003.2 の誤りにより、一致しない `(' が前にある場合にのみ `)' が 特殊文字になるので、`a)b' のようなものが正しい RE になってしまいます。 この問題は、仕様が修正されるまで修正されません。 .PP バックリファレンスに関する、標準の定義は曖昧になっています。 たとえば `a\e(\e(b\e)*\e2\e)*d' が `abbbd' と一致してしまうのです。標準が 明確になるまで、このような場合の動作は信頼すべきではありません。 .PP ワード境界マッチングのシステムは多少あいまいで、ワード境界マッチング とアンカの組み合わせにはバグが潜んでいる可能性があります。 diff --git a/ja_JP.eucJP/man/man4/cx.4 b/ja_JP.eucJP/man/man4/cx.4 index ab92ab9b43..ee0117b862 100644 --- a/ja_JP.eucJP/man/man4/cx.4 +++ b/ja_JP.eucJP/man/man4/cx.4 @@ -1,289 +1,289 @@ .\" .\" %Id: cx.4,v 1.4 1997/06/23 04:02:37 steve Exp % .\" $FreeBSD$ .\" .Dd December 12, 1994 .Dt CX 4 i386 .Os FreeBSD .Sh 名称 .Nm cx , .Nm if_cx .Nd 同期/非同期 Cronyx-Sigma アダプタドライバ .Sh 設定 .Cd "device cx0 at isa? port 0x240 irq 15 drq 7" .Cd "device cx1 at isa? port 0x260 irq 12 drq 6" .Cd pseudo-device sppp .Pp i/o ベースアドレスは、ボード上のジャンパで設定されます。 DMA チャネルと割り込みリクエスト番号は、 アダプタ初期化時にソフトウェアで設定されます。 通常の値は以下の通りです。 .Pp .Bl -tag -compact -width Port .It Port 0x240, 0x260, 0x280, 0x300, 0x320, 0x380 .It IRQ 3, 5, 7, 10, 11, 12, 15 .It DMA 5, 6, 7 .Sh 解説 Cronyx-Sigma ドライバはモデル 100, 400, 500, 401, 404, 410, 440, 703, 801, 810, 840 をサポートします。 モデルが異なると、チャネルのセットが異なります。 .Pp .Bl -tag -compact -width Cronyx-Sigma-999 .It モデル チャネル .It Cronyx-Sigma-100 0 .It Cronyx-Sigma-400 4, 5, 6, 7 .It Cronyx-Sigma-500 0, 4, 5, 6, 7 .It Cronyx-Sigma-401 0, 1, 2, 3 .It Cronyx-Sigma-404 0, 1, 2, 3 .It Cronyx-Sigma-410 0, 1, 2, 3 .It Cronyx-Sigma-440 0, 1, 2, 3 .It Cronyx-Sigma-703 0, 1, 2, 4, 5, 6, 7 .It Cronyx-Sigma-801 0, 1, 2, 3, 4, 5, 6, 7 .It Cronyx-Sigma-810 0, 1, 2, 3, 4, 5, 6, 7 .It Cronyx-Sigma-840 0, 1, 2, 3, 4, 5, 6, 7 .El .Pp ふたつのアダプタは、ボード間接続用の短い専用ケーブルで接続することができます。 ふたつの接続されたアダプタは、同じ IRQ と DMA チャネルを使用し、 ドライバから見ればひとつの 16 チャネルマルチプレクサとして動作します。 接続されたボードの片方が ``マスタ'' に、もう一方が ``スレーブ'' になります。 .Pp スレーブになったボードのチャネルは、 ドライバによって 8 から始まる番号が割り当てられます。 たとえばモデル 100 と モデル 500 を接続すると、 0, 8, 12, 13, 14, 15 番のチャネル番号が割り当てられます。 .Pp RS-232C インタフェースをもつチャネルは、 同期モードと非同期モードのどちらでも動作することが可能 (cxconfig ユーティリティによってソフトウェア的に選択します) であり、 そのため ``ユニバーサルチャネル'' と呼ばれます。 .Pp Cronyx-Sigma アダプタ用のデバイス型特殊ファイル .Pa /dev/* は、 .Xr MAKEDEV 8 -によっ作られます。 +によって作られます。 たとえば、以下のように作ります: .Bd -literal cd /dev sh MAKEDEV cronyx ttyx0 ttyx1 ttyy0 .El .Sh 非同期ドライバ .Pp 非同期チャネルのデバイスファイルには次のような名前が付けられます: .Pa /dev/ttyx# - はアダプタ cx0 に、 .Pa /dev/ttyy# - はアダプタ cx1 に、 .Pa /dev/ttyz# - はアダプタ cx2 に付けられます。 ここで # は 0-9-a-f の、16 進数でのチャネル番号です。 .Pp ドライバは以下の標準 ioctl を受け付けます ( .Xr ioctl を参照): .Pp .Bl -tag -width TIOCXXXXX -compact .It Dv TIOCSBRK BREAK を送信開始します。 .It Dv TIOCCBRK BREAK の送信を停止します。 .It Dv TIOCSDTR DTR 信号をセットします (DTR := 1)。 DTR 信号は最初の open(2) で必ずセットされ、 .Dv TIOCCDTR , .Dv TIOCSDTR , .Dv TIOCMSET , .Dv TIOCMBIS , .Dv TIOCMBIC の ioctl により変更可能です。 .It TIOCCDTR DTR 信号をクリアします (DTR := 0)。 .It TIOCMSET DTR 信号と RTS 信号に、指定した値をセットします ( := data)。 DTR 信号と RTS 信号は、 ioctl システムコールの引数中の .Dv TIOCM_DTR と .Dv TIOCM_RTS のビットにより制御可能です。 .It TIOCMBIS DTR 信号と RTS 信号をセットします ( |= data)。 DTR 信号と RTS 信号は、 ioctl システムコールの引数中の .Dv TIOCM_DTR と .Dv TIOCM_RTS のビットにより制御可能です。 .It TIOCMBIC DTR 信号と RTS 信号をクリアします ( &= ~data)。 DTR 信号と RTS 信号は、 ioctl システムコールの引数中の .Dv TIOCM_DTR と .Dv TIOCM_RTS のビットにより制御可能です。 .It TIOCMGET ライン上のモデム信号の状態を判定します。 呼び出しのあと、引数のデータは下記のビットを保持しています: .Pp .Bl -tag -width TIOCM_XXX -compact .It TIOCM_LE 常にセット (ラインイネーブル状態) .It TIOCM_DSR データセットレディ信号 (DSR) 受信済 .It TIOCM_CTS 送信可能信号 (CTS) 受信済 .It TIOCM_CD データキャリア検出信号 (CD) 受信済 .It TIOCM_DTR データ端末レディ (DTR) 信号送信済 .It TIOCM_RTS 送信要求 (RTS) 送信済 .El .El .Sh 同期ドライバ .Pp 同期チャネルとユニバーサルチャネルは、 .Xr cxconfig 8 ユーティリティによって同期モードに設定すると、 ネットワークインタフェース ``cx#'' (# は 0 から 47 までのチャネル番号) としてアクセス可能です。 すべての標準的なネットワークインタフェースパラメータは、 .Xr ifconfig 8 によって設定可能です。 また .Xr cxconfig 8 コマンドは、拡張されたチャネルオプションの変更や、 上位レベルのソフトウェアプロトコル (PpP や Cisco HDLC など) の設定に使用されます。 .Pp ユニバーサルチャネルは同期モードでも非同期モードでも使用することができます。 デフォルトでは非同期モードに設定されており、モードは .Xr cxconfig 8 ユーティリティによって変更可能です。 チャネルがビジー状態 (非同期チャネルがオープン状態の場合や、 ネットワークインタフェースが動作中 (up) の場合) の間、モードはブロックされます。 .Sh 同期ポイントツーポイントプロトコル .Pp Cronyx-Sigma ドライバは、組み込みの同期ポイントツーポイントプロトコル (sppp) を使用します。 本プロトコルには、PpP/HDLC や Cisco/HDLC、keepalive パケットによる 自動的なコネクションロス検出もサポートしています。 sppp プロトコルセットは独立したモジュールとして実装され、 他の同期シリアルチャネルのドライバによって使用することも可能です。 BSD/386 (BSDI) 用の ドライバでは、OS 側で実装されている一般的な同期プロトコルのセットも使用 可能です。外部プロトコルセットは、``cxconfig ext'' コマンド ( .Xr cxconfig 8 を参照) によって選択可能です。 .Sh チャネルオプションの管理 .Pp .Xr cxconfig 8 ユーティリティは、チャネルオプションを設定するのに使用されます。 チャネルオプションは、通常、オペレーティングシステムが起動する際に (たとえば .Pa /etc/rc ファイルなどで) 設定されます。 すべての場合において、 すべてのオプションが意味を持つとは限らないことに注意してください。 また、 オプションの設定によっては、 チャネルもしくはアダプタ全体のハングアップの原因になります。 .Pp 実際のチャネルオプションの制御機能は、 デバイス型特殊ファイル /dev/cronyx に対する いくつかの ioctl を経由する形で実装されており、以下の ioctl が使用できます。 .Pp .Bl -tag -width CXIOCXXXXXXX -compact .It CXIOCGETMODE チャネルオプションの値を取得します。 .It CXIOCSETMODE チャネルオプションの値を設定します。 .El .Pp ioctl コールのデータ引数は以下のオプション構造体のアドレスを持ちます: .Bd -literal typedef struct { unsigned char board; /* アダプタ番号であり、0..2 */ unsigned char channel; /* チャネル番号であり、0..15 */ unsigned char type; /* チャネルタイプ (読み込み専用) */ unsigned char iftype; /* chan0 インタフェース */ unsigned long rxbaud; /* 受信速度 */ unsigned long txbaud; /* 転送速度 */ cx_chan_mode_t mode; /* チャネルモード */ cx_chan_opt_t opt; /* 共通のチャネルオプション */ cx_opt_async_t aopt; /* 非同期モードオプション */ cx_opt_hdlc_t hopt; /* hdlc モードオプション */ cx_opt_bisync_t bopt; /* bisync モードオプション */ cx_opt_x21_t xopt; /* x.21 モードオプション */ cx_soft_opt_t sopt; /* ソフトウェアオプションと状態フラグ */ } cx_options_t; /* ユーザが設定可能なオプション */ .Ed .Pp .Bl -tag -width rxbaudxxx .It Fa board 0..2 の、アダプタ番号 .It Fa channel 0..15 の、チャネル番号 .It Fa type チャネルのタイプ (読み取り専用の引数) .It Fa iftype 0 番 (と 8 番) チャネルのインタフェースタイプ。 0 - RS-232, 1 - RS-449/V.35。 .It Fa rxbaud 受信ボーレート .It Fa txbaud 送信ボーレート .It Fa mode チャネルモード: 非同期/HDLC/Bisync/X.21 .It Fa opt 共通のチャネルオプション .It Fa aopt 非同期モードオプション .It Fa hopt HDLC モードオプション .It Fa bopt Bisync モードオプション .It Fa xopt X.21 モードオプション .It Fa sopt ソフトウェアプロトコルオプション .El .Sh 関連ファイル .Bl -tag -width /dev/cxXXXX -compact .It Pa /dev/cx?? 非同期チャネル .It Pa /dev/cronyx チャネルオプション管理用のデバイス型特殊ファイル .El .Pp ドライバを含んでいるソースファイルは以下の通りです: .Pp .Bl -tag -width /dev/cxXXXX -compact .It Pa /sys/i386/isa/cronyx.c .It Pa /sys/i386/isa/cx.c .It Pa /sys/i386/isa/if_cx.c .It Pa /sys/i386/isa/cronyx.h .It Pa /sys/i386/isa/cxreg.h .It Pa /sys/net/if_spppsubr.c .It Pa /sys/net/if_sppp.h .El .Sh 関連項目 .Xr cxconfig 8 , .Xr ifconfig 8 diff --git a/ja_JP.eucJP/man/man4/man4.i386/cx.4 b/ja_JP.eucJP/man/man4/man4.i386/cx.4 index ab92ab9b43..ee0117b862 100644 --- a/ja_JP.eucJP/man/man4/man4.i386/cx.4 +++ b/ja_JP.eucJP/man/man4/man4.i386/cx.4 @@ -1,289 +1,289 @@ .\" .\" %Id: cx.4,v 1.4 1997/06/23 04:02:37 steve Exp % .\" $FreeBSD$ .\" .Dd December 12, 1994 .Dt CX 4 i386 .Os FreeBSD .Sh 名称 .Nm cx , .Nm if_cx .Nd 同期/非同期 Cronyx-Sigma アダプタドライバ .Sh 設定 .Cd "device cx0 at isa? port 0x240 irq 15 drq 7" .Cd "device cx1 at isa? port 0x260 irq 12 drq 6" .Cd pseudo-device sppp .Pp i/o ベースアドレスは、ボード上のジャンパで設定されます。 DMA チャネルと割り込みリクエスト番号は、 アダプタ初期化時にソフトウェアで設定されます。 通常の値は以下の通りです。 .Pp .Bl -tag -compact -width Port .It Port 0x240, 0x260, 0x280, 0x300, 0x320, 0x380 .It IRQ 3, 5, 7, 10, 11, 12, 15 .It DMA 5, 6, 7 .Sh 解説 Cronyx-Sigma ドライバはモデル 100, 400, 500, 401, 404, 410, 440, 703, 801, 810, 840 をサポートします。 モデルが異なると、チャネルのセットが異なります。 .Pp .Bl -tag -compact -width Cronyx-Sigma-999 .It モデル チャネル .It Cronyx-Sigma-100 0 .It Cronyx-Sigma-400 4, 5, 6, 7 .It Cronyx-Sigma-500 0, 4, 5, 6, 7 .It Cronyx-Sigma-401 0, 1, 2, 3 .It Cronyx-Sigma-404 0, 1, 2, 3 .It Cronyx-Sigma-410 0, 1, 2, 3 .It Cronyx-Sigma-440 0, 1, 2, 3 .It Cronyx-Sigma-703 0, 1, 2, 4, 5, 6, 7 .It Cronyx-Sigma-801 0, 1, 2, 3, 4, 5, 6, 7 .It Cronyx-Sigma-810 0, 1, 2, 3, 4, 5, 6, 7 .It Cronyx-Sigma-840 0, 1, 2, 3, 4, 5, 6, 7 .El .Pp ふたつのアダプタは、ボード間接続用の短い専用ケーブルで接続することができます。 ふたつの接続されたアダプタは、同じ IRQ と DMA チャネルを使用し、 ドライバから見ればひとつの 16 チャネルマルチプレクサとして動作します。 接続されたボードの片方が ``マスタ'' に、もう一方が ``スレーブ'' になります。 .Pp スレーブになったボードのチャネルは、 ドライバによって 8 から始まる番号が割り当てられます。 たとえばモデル 100 と モデル 500 を接続すると、 0, 8, 12, 13, 14, 15 番のチャネル番号が割り当てられます。 .Pp RS-232C インタフェースをもつチャネルは、 同期モードと非同期モードのどちらでも動作することが可能 (cxconfig ユーティリティによってソフトウェア的に選択します) であり、 そのため ``ユニバーサルチャネル'' と呼ばれます。 .Pp Cronyx-Sigma アダプタ用のデバイス型特殊ファイル .Pa /dev/* は、 .Xr MAKEDEV 8 -によっ作られます。 +によって作られます。 たとえば、以下のように作ります: .Bd -literal cd /dev sh MAKEDEV cronyx ttyx0 ttyx1 ttyy0 .El .Sh 非同期ドライバ .Pp 非同期チャネルのデバイスファイルには次のような名前が付けられます: .Pa /dev/ttyx# - はアダプタ cx0 に、 .Pa /dev/ttyy# - はアダプタ cx1 に、 .Pa /dev/ttyz# - はアダプタ cx2 に付けられます。 ここで # は 0-9-a-f の、16 進数でのチャネル番号です。 .Pp ドライバは以下の標準 ioctl を受け付けます ( .Xr ioctl を参照): .Pp .Bl -tag -width TIOCXXXXX -compact .It Dv TIOCSBRK BREAK を送信開始します。 .It Dv TIOCCBRK BREAK の送信を停止します。 .It Dv TIOCSDTR DTR 信号をセットします (DTR := 1)。 DTR 信号は最初の open(2) で必ずセットされ、 .Dv TIOCCDTR , .Dv TIOCSDTR , .Dv TIOCMSET , .Dv TIOCMBIS , .Dv TIOCMBIC の ioctl により変更可能です。 .It TIOCCDTR DTR 信号をクリアします (DTR := 0)。 .It TIOCMSET DTR 信号と RTS 信号に、指定した値をセットします ( := data)。 DTR 信号と RTS 信号は、 ioctl システムコールの引数中の .Dv TIOCM_DTR と .Dv TIOCM_RTS のビットにより制御可能です。 .It TIOCMBIS DTR 信号と RTS 信号をセットします ( |= data)。 DTR 信号と RTS 信号は、 ioctl システムコールの引数中の .Dv TIOCM_DTR と .Dv TIOCM_RTS のビットにより制御可能です。 .It TIOCMBIC DTR 信号と RTS 信号をクリアします ( &= ~data)。 DTR 信号と RTS 信号は、 ioctl システムコールの引数中の .Dv TIOCM_DTR と .Dv TIOCM_RTS のビットにより制御可能です。 .It TIOCMGET ライン上のモデム信号の状態を判定します。 呼び出しのあと、引数のデータは下記のビットを保持しています: .Pp .Bl -tag -width TIOCM_XXX -compact .It TIOCM_LE 常にセット (ラインイネーブル状態) .It TIOCM_DSR データセットレディ信号 (DSR) 受信済 .It TIOCM_CTS 送信可能信号 (CTS) 受信済 .It TIOCM_CD データキャリア検出信号 (CD) 受信済 .It TIOCM_DTR データ端末レディ (DTR) 信号送信済 .It TIOCM_RTS 送信要求 (RTS) 送信済 .El .El .Sh 同期ドライバ .Pp 同期チャネルとユニバーサルチャネルは、 .Xr cxconfig 8 ユーティリティによって同期モードに設定すると、 ネットワークインタフェース ``cx#'' (# は 0 から 47 までのチャネル番号) としてアクセス可能です。 すべての標準的なネットワークインタフェースパラメータは、 .Xr ifconfig 8 によって設定可能です。 また .Xr cxconfig 8 コマンドは、拡張されたチャネルオプションの変更や、 上位レベルのソフトウェアプロトコル (PpP や Cisco HDLC など) の設定に使用されます。 .Pp ユニバーサルチャネルは同期モードでも非同期モードでも使用することができます。 デフォルトでは非同期モードに設定されており、モードは .Xr cxconfig 8 ユーティリティによって変更可能です。 チャネルがビジー状態 (非同期チャネルがオープン状態の場合や、 ネットワークインタフェースが動作中 (up) の場合) の間、モードはブロックされます。 .Sh 同期ポイントツーポイントプロトコル .Pp Cronyx-Sigma ドライバは、組み込みの同期ポイントツーポイントプロトコル (sppp) を使用します。 本プロトコルには、PpP/HDLC や Cisco/HDLC、keepalive パケットによる 自動的なコネクションロス検出もサポートしています。 sppp プロトコルセットは独立したモジュールとして実装され、 他の同期シリアルチャネルのドライバによって使用することも可能です。 BSD/386 (BSDI) 用の ドライバでは、OS 側で実装されている一般的な同期プロトコルのセットも使用 可能です。外部プロトコルセットは、``cxconfig ext'' コマンド ( .Xr cxconfig 8 を参照) によって選択可能です。 .Sh チャネルオプションの管理 .Pp .Xr cxconfig 8 ユーティリティは、チャネルオプションを設定するのに使用されます。 チャネルオプションは、通常、オペレーティングシステムが起動する際に (たとえば .Pa /etc/rc ファイルなどで) 設定されます。 すべての場合において、 すべてのオプションが意味を持つとは限らないことに注意してください。 また、 オプションの設定によっては、 チャネルもしくはアダプタ全体のハングアップの原因になります。 .Pp 実際のチャネルオプションの制御機能は、 デバイス型特殊ファイル /dev/cronyx に対する いくつかの ioctl を経由する形で実装されており、以下の ioctl が使用できます。 .Pp .Bl -tag -width CXIOCXXXXXXX -compact .It CXIOCGETMODE チャネルオプションの値を取得します。 .It CXIOCSETMODE チャネルオプションの値を設定します。 .El .Pp ioctl コールのデータ引数は以下のオプション構造体のアドレスを持ちます: .Bd -literal typedef struct { unsigned char board; /* アダプタ番号であり、0..2 */ unsigned char channel; /* チャネル番号であり、0..15 */ unsigned char type; /* チャネルタイプ (読み込み専用) */ unsigned char iftype; /* chan0 インタフェース */ unsigned long rxbaud; /* 受信速度 */ unsigned long txbaud; /* 転送速度 */ cx_chan_mode_t mode; /* チャネルモード */ cx_chan_opt_t opt; /* 共通のチャネルオプション */ cx_opt_async_t aopt; /* 非同期モードオプション */ cx_opt_hdlc_t hopt; /* hdlc モードオプション */ cx_opt_bisync_t bopt; /* bisync モードオプション */ cx_opt_x21_t xopt; /* x.21 モードオプション */ cx_soft_opt_t sopt; /* ソフトウェアオプションと状態フラグ */ } cx_options_t; /* ユーザが設定可能なオプション */ .Ed .Pp .Bl -tag -width rxbaudxxx .It Fa board 0..2 の、アダプタ番号 .It Fa channel 0..15 の、チャネル番号 .It Fa type チャネルのタイプ (読み取り専用の引数) .It Fa iftype 0 番 (と 8 番) チャネルのインタフェースタイプ。 0 - RS-232, 1 - RS-449/V.35。 .It Fa rxbaud 受信ボーレート .It Fa txbaud 送信ボーレート .It Fa mode チャネルモード: 非同期/HDLC/Bisync/X.21 .It Fa opt 共通のチャネルオプション .It Fa aopt 非同期モードオプション .It Fa hopt HDLC モードオプション .It Fa bopt Bisync モードオプション .It Fa xopt X.21 モードオプション .It Fa sopt ソフトウェアプロトコルオプション .El .Sh 関連ファイル .Bl -tag -width /dev/cxXXXX -compact .It Pa /dev/cx?? 非同期チャネル .It Pa /dev/cronyx チャネルオプション管理用のデバイス型特殊ファイル .El .Pp ドライバを含んでいるソースファイルは以下の通りです: .Pp .Bl -tag -width /dev/cxXXXX -compact .It Pa /sys/i386/isa/cronyx.c .It Pa /sys/i386/isa/cx.c .It Pa /sys/i386/isa/if_cx.c .It Pa /sys/i386/isa/cronyx.h .It Pa /sys/i386/isa/cxreg.h .It Pa /sys/net/if_spppsubr.c .It Pa /sys/net/if_sppp.h .El .Sh 関連項目 .Xr cxconfig 8 , .Xr ifconfig 8 diff --git a/ja_JP.eucJP/man/man4/mx.4 b/ja_JP.eucJP/man/man4/mx.4 index 2a086ee36b..f8ca7976ea 100644 --- a/ja_JP.eucJP/man/man4/mx.4 +++ b/ja_JP.eucJP/man/man4/mx.4 @@ -1,165 +1,165 @@ .\" Copyright (c) 1997, 1998 .\" Bill Paul . All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by Bill Paul. .\" 4. Neither the name of the author nor the names of any co-contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF .\" THE POSSIBILITY OF SUCH DAMAGE. .\" .\" %Id: mx.4,v 1.2 1998/12/05 09:31:25 rnordier Exp % .\" $FreeBSD$ .\" .Dd November 5, 1998 .Dt MX 4 i386 .Os FreeBSD .Sh 名称 .Nm mx .Nd Macronix 98713/98715/98725 ファストイーサネットデバイスドライバ .Sh 書式 .Cd "device mx0" .Sh 解説 .Nm ドライバは Macronix 98713, 98713A, 98715, 98715A, 98725 -ファストイーサネットコントローラチップを塔載した PCI イーサネットアダプタ +ファストイーサネットコントローラチップを搭載した PCI イーサネットアダプタ やそれが組み込まれたコントローラをサポートします。NDC Communications SOHOware SFA110, SVEC PN102-TX ファストイーサネットカード などを含みます。 .Pp Macronix のチップはバスマスタ DMA を用い、DEC 'tulip' 互換として デザインされています。オリジナルの 98713 は 外部 PHY をコントロール するための MII バス を用いていますが、98713A より上位のチップは NWAY をサポートした内部トランシーバを用いています。Macronix のチップは DEC 21x4x コントローラとレジスタ互換であると公表されています。Macronix コントローラはすべて、10, 100 Mbps を全二重または半二重通信でサポート します。 .Pp .Nm ドライバは次のメディアタイプをサポートします。 .Pp .Bl -tag -width xxxxxxxxxxxxxxxxxxxx .It autoselect メディアタイプとオプションの自動選択を有効にします。 ユーザは、 .Pa /etc/rc.conf ファイルにメディアオプションを加えることによって、 自動選択されたモードを手動で上書き可能です。 .It 10baseT/UTP 10Mbps に設定します。 .Ar mediaopt オプションも .Ar full-duplex または .Ar half-duplex モードを選択するために使用可能です。 .It 100baseTX 100Mbps (ファストイーサネット) に設定します。 .Ar mediaopt オプションも .Ar full-duplex または .Ar half-duplex モードを選択するために使用可能です。 .El .Pp .Nm ドライバは次のメディアオプションをサポートします。 .Pp .Bl -tag -width xxxxxxxxxxxxxxxxxxxx .It full-duplex 全二重通信に設定します。 .It half-duplex 半二重通信に設定します。 .El .Pp メディアタイプ 100baseTX はアダプタがサポートしている場合にのみ可能です。 このデバイスの設定に関するさらなる情報は .Xr ifconfig 8 を参照してください。 .Sh 診断 .Bl -diag .It "mx%d: couldn't map memory" 致命的な初期化エラーが発生しました。 .It "mx%d: couldn't map interrupt" 致命的な初期化エラーが発生しました。 .It "mx%d: watchdog timeout" デバイスがネットワークに反応しなくなったか、 ネットワークとの接続 (ケーブル) に問題があります。 .It "mx%d: no memory for rx list" ドライバはレシーバリング用の mbuf の確保に失敗しました。 .It "mx%d: no memory for tx list" パッドバッファを確保、または mbuf チェインをクラスタに 縮めるときに、トランスミッタリング用の mbuf の確保に失敗しました。 .It "mx%d: chip is in D3 power state -- setting to D0" パワーマネージメントをサポートするアダプタにのみ、このメッセージが出ま す。シャットダウン時にコントローラをローパワーモードにするオペレーティング システムがあり、チップ設定前にこの状態を解除しない PCI BIOS があります。 D3 状態において、コントローラは PCI の設定すべてを失うので、BIOS がそのときにフルパワーモードに設定しなおさなければ、正しく設定すること はできません。ドライバはこの状態を検出し、アダプタを D0 (フルパワー) 状態に設定しなおそうとしますが、ドライバを完全に操作できる状態にするの には至らないかもしれません。ブート時にこのメッセージが現れ、ドライバが ネットワークインタフェースとしてデバイスをアタッチすることに失敗するの なら、デバイスを適切に設定するために 2 度目のウォームブートを行う必要が あります。 .Pp 他のオペレーティングシステムからウォームブートするときのみに、この状態は 起こります。 .Fx のブート前にシステムの電源を切れば、カードが正常に設定されます。 .El .Sh 関連項目 .Xr arp 4 , .Xr netintro 4 , .Xr ifconfig 8 .Rs .%T Macronix 98713/A, 98715/A, 98725 データシート .%O http://www.macronix.com .Re .Rs .%T Macronix 98713/A, 98715/A アプリケーションノート .%O http://www.macronix.com .Re .Sh 歴史 .Nm デバイスドライバは .Fx 3.0 に初めて現れました。 .Sh 作者 .Nm ドライバは .An Bill Paul Aq wpaul@ctr.columbia.edu が書きました。 .Sh バグ Macronix アプリケーションノートによると、チップを通常動作に設定するに は、ドライバはあるマジックナンバを CSR16 レジスタに書き込む必要があります。 そのマジックナンバはアプリケーションノートに書いてありますが、ビット の正確な意味は書いてありません。 .Pp 98713A は 10Mbps 全二重通信モードに問題があるようです。 トランスミッタは動作しますが、レシーバは全体のパフォーマンスを著しく下 げるような不明なエラーを大量に出す傾向にあります。 98715A にはこの問題がありません。98713A のそれ以外のすべてのモードでは 正しく動作するようです。 diff --git a/ja_JP.eucJP/man/man5/groff_out.5 b/ja_JP.eucJP/man/man5/groff_out.5 index 88243d1b54..c2daad37dc 100644 --- a/ja_JP.eucJP/man/man5/groff_out.5 +++ b/ja_JP.eucJP/man/man5/groff_out.5 @@ -1,1909 +1,1909 @@ '\" e .\" The above line should force the use of eqn as a preprocessor .ig groff_out.5 Last update: 13 Apr 2003 This file is part of groff, the GNU roff type-setting system. Copyright (C) 1989, 2001, 2002, 2003 Free Software Foundation, Inc. rewritten from scrach 2001 by Bernd Warken Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHORS, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the Free Documentation License is included as a file called FDL in the main directory of the groff source package. .. .\" $FreeBSD$ .\" .\" FreeBSD jpman project 訳語表 .\" WORD: scaled point スケールドポイント (groff_font.5 参照) .\" WORD: print 印字 . .\" -------------------------------------------------------------------- .\" Setup .\" -------------------------------------------------------------------- . .mso www.tmac . .if n \{\ . mso tty-char.tmac . ftr CR R . ftr CI I . ftr CB B .\} . .if '\*[.T]'dvi' \ . ftr CB CW . .if t \{\ .EQ delim $$ .EN .\} . .\" ----------------- Document configuration . .\" Number register to decide whether the commands `{' and `}' are used .\" 0: disable (actual default); 1: enable .nr @USE_ENV_STACK 0 . .ig Unfortunately, old versions of groff used an illogical position change after some D\~commands (Dp, DP, Dt). If the number register @STUPID_DRAWING_POSITIONING is 1 (actual default) then change position after these commands, otherwise the position is not changed. .. .nr @STUPID_DRAWING_POSITIONING 1 . .\" ----------------- Syntactical definitions . .\" comments when escapes are switched off .de c .. .\" Begin of macro definitions .eo . .de Text . nop \)\$* .. .c follow-up line for a .TP header .de TP+ . br . ns . TP \$1 .. .c a bulleted paragraph .de Topic . TP 2m . nop \[bu] .. .de ShellCommand . br . IR "shell>" "\h'1m'\f[CB]\$*\f[]\/" .. .ec .\" End of macro definitions . .c ----------------- Semantical definitions . .nr @maxcolor 65536 .ds @backslash \[rs]\" .ds @linebreak \f[R]\[la]line_break\[ra]\f[]\" . .\" Begin of macro definitions .eo . .c format: .unit .de unit . BR \$@ .. .c argument in italic with punctuation .de argument . if (\n[.$] == 0) \ . return . IR \$@ .. .c comma separated list of indexed variables .de list1..n . ds @arg1 \$1\" . nop \c . ie t \ . nop $\*[@arg1] sub 1$, $\*[@arg1] sub 2$, .\|.\|., $\*[@arg1] sub n$ \c . el \{\ . IR \*[@arg1]1 , . IR \*[@arg1]2 , . nop \&..., . I \*[@arg1]n . \} . rm @arg1 .. .de offset . if (\n[.$] < 2) \ . ab `.offset' needs at least 2 arguments . ds @arg1 \$1\" . ds @arg2 \$2\" . shift 2 . nop (\f[I]\,\*[@arg1]\/\f[],\ \f[I]\,\*[@arg2]\/\f[])\$* . rm @arg1 . rm @arg2 .. .de indexed_offset . if (\n[.$] < 4) \ . ab `.indexed_offset' needs at least 4 arguments . ds @arg1 \$1\" . ds @index1 \$2\" . ds @arg2 \$3\" . ds @index2 \$4\" . shift 4 . ie t \{\ . ie \B'\*[@index1]' \{\ . nop ($\*[@arg1] sub roman \*[@index1]$,\ \c . \} . el \{\ . nop ($\*[@arg1] sub \*[@index1]$,\ \c . \} . ie \B'\*[@index2]' \{\ . nop $\*[@arg2] sub roman \*[@index2]$)\$* \c . \} . el \{\ . nop $\*[@arg2] sub \*[@index2]$)\$* \c . \} . \} . el \{\ . nop (\f[I]\*[@arg1]\*[@index1]\f[],\ \c . nop \f[I]\*[@arg2]\*[@index2]\f[])\$* \c . \} . rm @arg1 . rm @arg2 . rm @index1 . rm @index2 .. .c format: .command "" .de command . ds @arg1 \$1\" . ds @arg2 \$2\" . shift 2 . IP "\f[B]\*[@arg1]\f[]\ \f[I]\,\*[@arg2]\/\f[]\$*" . rm @arg1 . rm @arg2 .. .c format: .command+ "" .c continue previous .command heading .de command+ . ds @arg1 \$1\" . ds @arg2 \$2\" . shift 2 . TP+ . Text "\f[B]\*[@arg1]\f[]\ \f[I]\,\*[@arg2]\/\f[]\$*" . rm @arg1 . rm @arg2 .. .c format: .D-command "" .de D-command . ds @sub \$1\" . shift 1 . IP "\f[B]D\*[@sub]\f[]\ \f[I]\,\$*\/\f[]\|\*[@linebreak]" . rm @sub .. .c format: .D-command+ "" .c continue previous .D-command heading .de D-command+ . ds @sub \$1\" . shift 1 . TP+ . Text "\f[B]D\*[@sub]\f[]\ \f[I]\,\$*\/\f[]\*[@linebreak]" . rm @sub .. .de Da-command . shift 1 . ie t \ . ds @args $h sub 1$\~$v sub 1$ $h sub 2$\~$v sub 2$\" . el \ . ds @args \f[I]h1\~v1 h2\~v2\f[]\" . IP "\f[B]Da\f[]\ \*[@args]\|\*[@linebreak]" . rm @args .. .c graphics command .D with a variable number of arguments .c format: .D-multiarg .de D-multiarg . ds @sub \$1\" . shift 1 . ie t \{\ . ds @args "$h sub 1$\~$v sub 1$ $h sub 2$\~$v sub 2$ .\|.\|. \" . as @args "$h sub n$\~$v sub n$\" . \} . el \ . ds @args \f[I]h1\~v1 h2\~v2\f[] ... \f[I]\,hn\~vn\f[]\" . IP "\f[B]D\*[@sub]\f[]\ \*[@args]\|\*[@linebreak]" . rm @args . rm @sub .. .c format: .x-command "" .de x-command . ds @sub \$1\" . shift 1 . ds @args . if (\n[.$] > 0) \ . ds @args \ \f[I]\,\$*\/\f[]\" . IP "\f[B]x\*[@sub]\f[]\*[@args]\f[]\|\*[@linebreak]" . rm @sub . rm @args .. .de xsub . RI "(" "\$1" " control command)" . br .. .ec .\" End of macro definitions . . .\" -------------------------------------------------------------------- .\" Title .\" -------------------------------------------------------------------- . .TH GROFF_OUT 5 "1 May 2003" "Groff Version 1.19" . .SH 名称 groff_out \- groff の中間出力フォーマット . . .\" -------------------------------------------------------------------- .SH 解説 .\" -------------------------------------------------------------------- . このマニュアルページは、GNU の .BR roff (7) テキスト処理システムの中間出力フォーマットについて記述しています。 . この出力は、デバイスの後処理プログラムに渡される前に、GNU .BR troff (1) プログラムの実行によって生成されます。 . .P GNU の roff 処理系である .BR groff (1) は troff を包むラッパプログラムであり、 この troff は自動的に後処理プログラムを呼び出すため、 通常この出力は目には触れません。 . そのため、これは .I groff .IR システム において .I 中間的 と呼ばれます。 . .B groff プログラムには後処理を行わないようにする .B -Z オプションがあり、このオプションをつけることで .B troff を手動で呼び出した時のように 生成された中間出力を標準出力に送ることができます。 . .P この文書において、 .I troff 出力 という用語は GNU troff プログラムによる出力を指し、 .I 中間出力 という用語は後処理プログラム用にこの出力を下ごしらえするパーサによって 受け付けられる言語を指します。 . このパーサは空白をうまく処理し、 また旧式の要素を互換性を保つために実装しています。 それ以外は、どちらの形式も同じものです。 . groff 以前の版の roff は、 .I 古典的な .IR troff と表記されます。 . .P 中間出力のコンセプトの一番の目的は、すべてのデバイスに対して 共通のプログラミングインタフェースを提供することによって、 後処理プログラムの開発を容易にすることです。 . これは、 .BR groff (7) 言語とはまったく異なった独自の言語です。 . .I groff 言語は、テキスト処理用の高レベルなプログラミング言語であるのに対し、 中間出力言語は、文字表示や描画のためにページ上のすべての位置を指定する、 低レベルのアセンブリ言語のような言語です。 . .P .I groff によって生成される中間出力はかなり読みやすいのですが、一方 .I 古典的な troff の出力は、奇妙な習慣のために理解しづらいものでした。 この習慣は、まだ .I GNU .IR troff でサポートされてはいますが、もう使われていません。 . . .\" -------------------------------------------------------------------- .SH "言語のコンセプト" .\" -------------------------------------------------------------------- . .BR troff の実行中に、roff への入力は、指定されたデバイスの どの位置に何が印字されるのかという情報へと細かく分解されます。 . したがって、中間出力フォーマットの言語はとても小さなものです。 . その唯一の要素は、引数あり、もしくは引数なしのコマンドです。 . この文書中において、「コマンド」という用語は、 文書整形に使われる roff 言語ではなく、常に中間出力言語を指します。 . これらのコマンドには、テキストの表示や図の描画、デバイスの制御を 行うものがあります。 . . .\" -------------------------------------------------------------------- .SS "区切り" .\" -------------------------------------------------------------------- . .I 古典的な troff 出力 には、空白に関して奇妙な要求事項があります。 . しかし .I groff 出力のパーサは、空白を最大限に省略可能とすることによって、 空白をよりうまく処理します。 . 空白文字、つまり .IR tab , .IR space , .I newline 文字は、常に構文上の意味を持ちます。 . これらの文字は印字可能ではありません。 なぜなら、出力に含まれる空白は、すべて位置コマンドによって 空けられるからです。 . .P どの .I space や .I tab の連続も、1 つの .B 構文上の .BR 空白 として扱われます。 . これによってコマンドと引数とが区切られます。 しかしこれは、コマンドコードとその引数とが、空白がないために ぶつかり合ってしまう場合のみ必要となります。 . ほとんどの場合、これは可変長のコマンド名や引数、引数リスト、 コマンド群が一緒に出てきた時に発生します。 . 固定長の既知のコマンドと引数の場合は、 構文上の空白によって区切る必要はありません。 . .P 改行も構文上の要素です。 . すべてのコマンド引数の後には、空白やコメント、改行文字を続けることができます。 . したがって .B 構文上の改行 は、省略可能な構文上の空白の後に、省略可能なコメントが続き、 これに改行文字が続いたものから構成されると定義されます。 . .P 位置指定やテキスト用の普通のコマンドは 1 文字から成り、 既定数の引数を取ります。 . 歴史的な理由により、パーサはそれらのコマンドを同じ行に重ねることを 許しています。 しかし幸いなことに、groff の中間出力において、 少なくとも 1 つの引数を持つすべてのコマンドの後には改行が続くので、 非常に読みやすくなっています。 . .P その他のコマンド \[em] 描画やデバイス制御用のもの \[em] は、 さらに複雑な構造をしています。 長いコマンド名のものもありますし、可変個の引数を取るものもあります。 . したがって、すべての .B D と .B x コマンドには、設計上、最後の引数の後に .I 構文上の改行 が必要です。 . ただ 1 つのコマンド .RB ` x\ X ' だけは、いくつかの行に渡って引数を置くことができますが、 その他のすべてのコマンドは、コマンドと同じ行にすべての引数が なければなりません。 . .P 空行、すなわち空白やコメントだけからなる行は、 どこにあっても構いません。 . それらは単に無視されます。 . . .\" -------------------------------------------------------------------- .SS "引数の単位" .\" -------------------------------------------------------------------- . コマンドの中には、ある測定単位で表された値とみられるけれど、 .I スケール指示子 に対応する文字が、出力コマンド引数と一緒に書かれていない 整数引数を取るものがあります。 このトピックに関するさらなる情報は、 .BR groff (7) と groff info ファイルを参照してください。 . ほとんどのコマンドは、デバイスの基本単位であるスケール指示子\~\c .unit u を想定しており、いくつかのコマンドはデバイスの .I スケールドポイント単位 である\~\c .unit z を想定していますが、色コマンドなどの他のコマンドは 単なる整数を期待しています。 . これらのスケール指示子は、指定されたデバイスに 関連したものであることに注意してください。 . それらは、デバイスの .I DESC ファイルで指定されたパラメータによって定義されています。 .BR groff_font (5) を参照してください。 . .P 単一文字は、8 ビット目が設定されていても構いません。 これはフォント名や特殊文字名も同じです。 . 文字名やフォント名は、任意の長さにできます。 . 印刷される文字は、常に現在のフォント中に存在するものです。 . .P 文字列引数は常に、次に続く空白文字 (空白、タブ、改行) によって終了します。 埋め込まれた .B # 文字は引数の一部とみなされ、コメントコマンドの始まりとは解釈されません。 . 整数引数は常に、次に続く数字以外の文字によって終了します。 そしてその文字は、次の引数またはコマンドの最初の文字とみなされます。 . . .\" -------------------------------------------------------------------- .SS "文書部分" .\" -------------------------------------------------------------------- 正しい中間出力の文書は、導入部と本体の 2 つの部分から構成されます。 . .P .I 導入部 の役割は、3 つの正確に指定されたコマンドを用いて、 一般的なデバイスパラメータを設定することです。 . .I groff の導入部 は、以下の 3 行から (この順番で) 構成されていることが保証されています: .RS .P .B x\ T .I device .br .B x\ res .I n\ h\ v .br .B x init .RE .P この引数の組は、 .BR "デバイス制御コマンド" の節で概略が説明されています。 . しかし、中間出力フォーマット用のパーサは、 追加の空白やコメントも同様に受け入れることができます。 . .P .I 本体 は、文書データの処理を行う主要な節です。 . 構文上は、導入部で使れたコマンド以外のコマンドが連続したものとなります。 . 処理は、最初の .B x\ stop があるとすぐに終了します。 すべての groff 中間出力の最終行には、このコマンドが必ずあります。 . .P 意味的には、本体はページ指向です。 . 新しいページは .BR p \~コマンド によって開始されます。 . 位置指定、文字出力、描画コマンドは、常に現在のページに対して行われます。 ですから、それらのコマンドは最初の .BR p \~コマンド の前には現れません。 . ( .B H と .BR V \~コマンド による) 絶対位置指定は、現在のページに相対的に行われ、 それ以外の位置指定は、現在のページの現在位置に相対的に行われます。 . . .\" -------------------------------------------------------------------- .SH "コマンドリファレンス" .\" -------------------------------------------------------------------- . この節では、すべての中間出力コマンドや古典的なコマンド、 .I groff 拡張について記述しています。 . . .\" -------------------------------------------------------------------- .SS "コメントコマンド" .\" -------------------------------------------------------------------- . .TP .BI # anything \[la]end_of_line\[ra] コメントです。 . .BR # \~\c 文字から次の改行文字までのすべての文字を無視します。 . .P このコマンドは、中間出力内にコメントを記述する唯一の方法です。 . それぞれのコメントの前には、任意個の .I 構文上の .IR 空白 があっても構いません。 またすべてのコマンドは、コメントによって終了できます。 . . .\" -------------------------------------------------------------------- .SS "単純コマンド" .\" -------------------------------------------------------------------- . この小節では、1 文字から成り、既定個の引数を取るコマンドを説明しています。 . そのほとんどは、位置指定とテキスト出力のコマンドです。 . これらのコマンドは、空白をうまく処理します。 . 状況に応じて、 .I 構文上の空白 は、コマンド文字とその引数の前にも、後にも、 その間にも挿入できます。 . これらすべてのコマンドは、重ねることができます。 つまり、同じ行に他の単純コマンドが前にあってもいいですし、 他の任意のコマンドが後に続いても構いません。 . 区切りに使われる構文上の空白は、2 つの整数引数が衝突する時や、 前に続く引数が文字列引数で終わる時にのみ必要となります。 . . .if (\n[@USE_ENV_STACK] == 1) \{\ .command { 現時点のデバイス設定データを環境スタックにコピーして、 新しい環境を開始します。 . 現在の環境はデバイス仕様書によって設定され、 設定コマンドで操作されます。 . . .command } (前にある .BR { \~コマンド で開始された) 現在の環境を終了し、環境スタックから、 以前の環境を現時点のデバイス設定データとして復帰させます。 . \} \" endif @USE_ENV_STACK . . .command C xxx \[la]white_space\[ra] 特殊な groff 文字名 .argument xxx を印字します。 . 任意の長さの文字名を指定可能とするために、 その後には構文上の空白または改行が必要となります。 . 文字は現在の印字位置に印字され、 文字の大きさはフォントファイルから読み込まれます。 . 印字位置は変化しません。 . . .command c c 現在の印字位置に、文字\~\c .argument c を印字します。 文字の大きさはフォントファイルから読み込まれます。 . 印字位置は変化しません。 . . .command f n フォントをフォント番号\~\c .argument n (非負整数) に設定します。 . . .command H n 現在のページの左端から絶対水平位置\~\c .argument n (非負整数、単位は基本単位\~\c .unit u ) に移動します。 . . .command h n 水平方向、右に、基本単位\~\c .unit u で .argument n (非負整数) だけ移動します。 . .I [54] では .I n に負の値も指定できますが、 .I groff ではこれは使用していません。 . . .command m "color_scheme \f[R][\f[]component .\|.\|.\f[R]]\f[]" 異なるカラースキームを用いて、テキスト (グリフ) や線図、 図形オブジェクトの輪郭の色を設定します。 これと類似した、図形オブジェクトを色で塗り潰すためのコマンドは .BR DF です。 . 色の成分は、0 から \n[@maxcolor] までの整数で指定します。 . 色の成分数とその意味は、カラースキームによって異なります。 . これらのコマンドは、groff のエスケープシーケンス .BR \*[@backslash]m によって生成されます。 . これによって位置は変更されません。 . これらのコマンドは groff 拡張です。 . . .RS . .command mc "cyan magenta yellow" シアン、マゼンタ、黄の 3 つの色の成分を持つ CMY カラースキームを用いて、 色を設定します。 . . .command md デフォルトの色の値 (ほとんどの場合、黒) に設定します。 . 成分引数はありません。 . . .command mg "gray" 0 (黒) から \n[@maxcolor] (白) までの整数引数を指定して、 灰色の色調に設定します。 . . .command mk "cyan magenta yellow black" シアン、マゼンタ、黄、黒の 4 つの色の成分を持つ CMYK カラースキームを 用いて、色を設定します。 . .command mr "red green blue" 赤、緑、黄の 3 つの色の成分を持つ RGB カラースキームを用いて、 色を設定します。 . .RE . . .command N n 現在のフォントのインデックス\~\c .argument n (整数、通常は非負) を持つ文字を印字します。 . .B \-T\~html が使用された場合、指定された幅の改行されない空白を指示するために、 負の値も使用されます。 . 例えば .B N\~-193 は、193u の幅を持つ改行されない空白を表します。 . 印字位置は変更しません。 . このコマンドは groff 拡張です。 . . .command n b\ a デバイスに対して改行を通知しますが、 このコマンドによって位置は指定されません。 . 古典的な troff では、何の動作も起こさせずに中間出力を もっと人に読みやすくするために、整数引数 .argument b と .argument a によって、現在行の前 (before) と後 (after) の空白を通知していました。 . groff では、これらの引数は単に無視されます。 しかし、これらは互換性のために提供されなければなりません。 . . .command p n 出力において、新しいページを開始します。 . ページ番号は、 .argument n によって設定されます。 . このページは、それまでに処理されたページとは完全に独立しています。 たとえそれが同じページ番号を持っていたとしてもです。 . 出力の垂直位置は、自動的に 0 に設定されます。 . すべての位置指定やテキストの表示、図の描画は、 常にページと相対的に行われます。 したがって .BR p コマンドは、これらのコマンドの前に発行されなければなりません。 . . .command s n ポイントの大きさを .argument n スケールドポイント (GNU .BR troff では、単位は .unit z ) に設定します。 . 古典的な troff は、かわりに単位として .I ポイント (\c .unit p ) を使っていました。 .BR 互換性 の節を参照してください。 . . .command t xxx \[la]white_space\[ra] .command+ t "xxx dummy_arg" \[la]white_space\[ra] 単語、すなわち空白文字もしくは改行によって終了する連続した文字 .argument xxx を印字します。 省略可能である 2 つ目の整数引数は無視されます (これによってフォーマッタは、偶数個の引数を生成することができます)。 . 最初の文字は現在位置に印字され、現在の水平位置は最初の文字の幅だけ ずらされます。 同様にして、それぞれの文字も処理されます。 . 文字幅はフォントファイルから読み込まれ、現在のポイントの大きさで 拡大された後、水平解像度の倍数に丸められます。 . 特殊文字はこのコマンドを用いて印字できません (名前付き文字の印字には .B C コマンドを使用してください)。 . このコマンドは groff 拡張です。 これは .I DESC ファイルに .B tcommand キーワードを含んでいるデバイスに対してのみ使用されます。 .BR groff_font (5) を参照してください。 . . .command u "n xxx" \[la]white_space\[ra] トラックカーニングを行いながら単語を印字します。 . これは .B t コマンドと同じですが、現在の水平位置が文字幅と .argument n (整数、単位は基本単位\~\c .unit u ) との和だけずらされるところが異なります。 このコマンドは groff 拡張です。 これは .I DESC ファイルに .B tcommand キーワードを含んでいるデバイスに対してのみ使用されます。 .BR groff_font (5) を参照してください。 . . .command V n 現在のページの上端から絶対垂直位置\~\c .argument n (非負整数、単位は基本単位\~\c .unit u ) に移動します。 . . .command v n 下に、基本単位\~\c .unit u で .argument n (非負整数) だけ移動します。 . .I [54] では .I n に負の値も指定できますが、 .I groff ではこれは使用していません。 . . .command w 可読性を上げるためのパディングの空白について通知します。 . 字間、行間指定自体は、移動コマンドによって明示的に行われなければなりません。 . . .\" -------------------------------------------------------------------- .SS "図形コマンド" .\" -------------------------------------------------------------------- . 中間出力内のそれぞれの図形コマンドまたは描画コマンドは、文字\~\c .B D で始まり、その後にサブコマンドを表す 1 つもしくは 2 つの 文字が続きます。 さらにその後には、単一の空白文字で区切られた既定個もしくは 可変個の整数引数が続きます。 . .BR D \ コマンド は、同じ行に (コメント以外の) 他のコマンドが続いてはいけません。 したがって、それぞれの .BR D \ コマンド は構文上の改行で終了します。 . .P .I troff 出力は、古典的な空白挿入の規則に従います (コマンドとサブコマンド間には空白を入れず、 すべての引数の前には空白を入れます)。 しかしパーサは、コマンド文字間に空白を入れることを許していますし、 最初の引数の前の空白を省略可能にしています。 . いつもと同様に、それぞれの空白は、 タブ文字と空白文字の任意の連続で構いません。 . .P 図形コマンドには、可変個の引数を取るものがあります。 . この場合、それらは基本単位\~\c .unit u を単位とした大きさを表す整数です。 . .list1..n h と呼ばれる引数は、水平方向の距離を表しています。 正の値は右を、負の値は左を意味しています。 . .list1..n v と呼ばれる引数は、垂直方向の距離を表しています。 正の値は下を、負の値は上を意味しています。 . これらの距離はすべて、現在位置からの相対的なオフセットです。 . .P 特に記述がなければ、それぞれの図形コマンドは、 .I groff の同様の .B \*[@backslash]D エスケープシーケンスに直接対応しています。 .BR groff (7) を参照してください。 . .P 不明な D\~コマンドは、デバイス固有のコマンドとみなされます。 . その引数は文字列としてパースされ、 その情報はまるごと後処理プログラムに送られます。 . .P 以下のコマンドリファレンスでは、構文要素 .I \[la]line_break\[ra] は、 .BR 区切り の節で定義された .I 構文上の改行 を意味しています。 . . .D-multiarg ~ 現在位置からオフセット .indexed_offset h 1 v 1 を通り、指定されていたら .indexed_offset h 2 v 2 を通り、 .indexed_offset h n v n までの B スプライン曲線を描画します。 このコマンドは、可変個の引数のペアを取ります。 現在位置は描画された曲線の最終点に移動します。 . . .Da-command .indexed_offset h 1 v 1 を中心として、現在位置から .indexed_offset h 1 v 1 \|+\|\c .indexed_offset h 2 v 2 までの円弧を描画します。 現在位置は円弧の最終点に移動します。 . . .D-command C d .D-command+ C d dummy_arg 現在位置を最左端とする、半径\~\c .argument d (整数、単位は基本単位\~\c .unit u ) の塗り潰された円を、現在の塗り潰し色で描画します。 現在位置は円の最右端に移動します。 . 省略可能である 2 つめの整数引数は無視されます (これによってフォーマッタは、偶数個の引数を生成することができます)。 . このコマンドは groff 拡張です。 . . .D-command c d 現在位置を最左端とする、半径\~\c .argument d (整数、単位は基本単位\~\c .unit u ) の円を、線で描画します。 現在位置は円の最右端に移動します。 . . .D-command E "h v" 現在位置を最左端とする、水平半径\~\c .argument h と垂直半径\~\c .argument v (どちらも整数、単位は基本単位\~\c .unit u ) の塗り潰された楕円を、現在の塗り潰し色で描画します。 現在位置は楕円の最右端に移動します。 . このコマンドは groff 拡張です。 . . .D-command e "h v" 現在位置を最左端とする、水平半径\~\c .argument h と垂直半径\~\c .argument v (どちらも整数、単位は基本単位\~\c .unit u ) の楕円の輪郭を描画します。 現在位置は楕円の最右端に移動します。 . . .D-command F "color_scheme \f[R][\f[]component .\|.\|.\f[R]]\f[]" 異なるカラースキームを用いて、塗り潰された描画オブジェクト用の 塗り潰し色を設定します。 これと類似した、 テキストや線図、図形オブジェクトの輪郭の色を設定するコマンドは .BR m です。 . 色の成分は、0 から \n[@maxcolor] までの整数で指定します。 . 色の成分数とその意味は、カラースキームによって異なります。 . これらのコマンドは、groff のエスケープシーケンス .B \*[@backslash]D'F\ .\|.\|.' と .B \*[@backslash]M (他の対応する図形コマンドがない場合) によって生成されます。 . これによって位置は変更されません。 . このコマンドは groff 拡張です。 . . .RS . .D-command Fc "cyan magenta yellow" シアン、マゼンタ、黄の 3 つの色の成分を持つ CMY カラースキームを用いて、 塗り潰された描画オブジェクト用の塗り潰し色を設定します。 . . .D-command Fd 塗り潰された描画オブジェクト用の塗り潰し色を、 デフォルトの色の値 (ほとんどの場合、黒) に設定します。 . 成分引数はありません。 . . .D-command Fg "gray" 0 (黒) から \n[@maxcolor] (白) までの整数引数を指定して、 塗り潰された描画オブジェクト用の塗り潰し色を、灰色の色調に設定します。 . . .D-command Fk "cyan magenta yellow black" シアン、マゼンタ、黄、黒の 4 つの色の成分を持つ CMYK カラースキームを 用いて、塗り潰された描画オブジェクト用の塗り潰し色を設定します。 . .D-command Fr "red green blue" 赤、緑、黄の 3 つの色の成分を持つ RGB カラースキームを用いて、 塗り潰された描画オブジェクト用の塗り潰し色を設定します。 . .RE . . .D-command f n 引数 .argument n は、-32767 から 32767 までの整数でなければなりません。 . .RS .TP .RI "0 \[<=] " n " \[<=] 1000" 塗り潰された描画オブジェクト用の塗り潰し色を、灰色の色調に設定します。 ここで 0 は塗り潰された白に対応し、1000 (デフォルト) は 塗り潰された黒に対応します。 この間の値は、中間的な灰色の色調に対応します。 これは、コマンド .BR DFg によって旧式のものとなっています。 . .TP .IR n " < 0 or " n " > 1000" 塗り潰された描画オブジェクト用の塗り潰し色を、 現在、テキストや輪郭に使われている色に設定します。 コマンド .BR m を参照してください。 例えば、コマンド列 . .nf .ft CB .RS .RS mg 0 0 \n[@maxcolor] Df -1 .RE .ft .fi . は、すべての色を青に設定します。 .RE . .P これによって位置は変更されません。 . このコマンドは groff 拡張です。 . .RE . . .D-command l "h v" 現在位置からオフセット .offset h v (整数、単位は基本単位\~\c .unit u ) まで線を引きます。 現在位置は描画した線の最終点に移動します。 . . .D-multiarg p 現在位置からオフセット .offset h1 v1 を通り、 .offset h2 v2 を通り、 .offset hn vn を通って最初の点に戻るような多角形を、線で描画します。 . .ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\ 歴史的な理由により、位置は、奇数番目の引数の和を水平位置に、 偶数番目の引数の和を垂直位置に加算したところに移動します。 . これは理にかなったものではありませんが、 互換性のためにそのままになっています。 . \} .el \{\ 多角形は閉じられるため、描画の最終点は開始点となります。 したがって位置は変更されません。 \} . このコマンドは groff 拡張です。 . . .D-multiarg P 対応する .B Dp コマンドと同じ引数を持つ同様のマクロですが、 多角形の外枠を描画するのではなく、塗り潰された多角形を描画します。 . .ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\ 位置は .BR Dp と同様に変更されます。 \} .el \ 位置は変更されません。 . このコマンドは groff 拡張です。 . . .D-command t n .argument n >0 の場合、現在の線幅を\~\c .argument n (整数、単位は基本単位\~\c .unit u ) に設定します。 .argument n =0 の場合、線幅を可能な最小の細さに設定します。 .argument n <0 の場合、線幅をポイントサイズに比例するようにします (これは、最初に .B Dt コマンドが指定されるまでのデフォルトです)。 . .ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\ 垂直位置は変更されませんが、歴史的な理由により水平位置は、 引数を実際の水平位置に足したところに変更されます。 . これは理にかなったものではありませんが、 互換性のためにそのままになっています。 . \} .el \ 位置は変更されません。 . このコマンドは groff 拡張です。 . . .\" -------------------------------------------------------------------- .SS "デバイス制御コマンド" .\" -------------------------------------------------------------------- . 各々のデバイス制御コマンドは、文字 .B x で始まり、ひとつの空白文字 (groff では省略可能であり、任意個の空白やタブも使えます) と サブコマンドの文字または単語が続きます。 (もし引数がある場合) それぞれの引数の前には、構文上の空白が なければなりません。 . すべての .B x コマンドは .IR "構文上の改行" によって終了します。 デバイス制御コマンドの後には、(コメントを除いて) 同じ行に 他のコマンドが続いてはなりません。 . .P サブコマンドは基本的に 1 文字ですが、 読みやすくするために 1 語で書く事もできます。 つまり次のタブ、空白、改行文字で終了する任意の文字列を 使用する事ができます。 . サブコマンドの単語に含まれる最初の文字以外のすべての文字は、 単に無視されます。 . 例えば .I troff は初期化コマンド .B x\ i として .B x\ init を、解像度コマンド .B x\ r として .BR "x\ res" を出力します。 . しかし、 .B x\ i_like_groff や .B x\ roff_is_groff resp.\& のような記述も、同様に同じコマンドとして受け付けられます。 . .P 以下では、構文要素 .I \[la]line_break\[ra] は、 .BR 区切り の節で定義された .I 構文上の改行 を意味しています。 . .x-command F name .xsub Filename .argument name を、現在のファイルに対して指定した名前として、エラーレポート中で使用します。 . これは、groff が内部的なパイプ機構を使用している場合、 元のファイル名を記憶しておくのに役に立ちます。 . 入力ファイルは、このコマンドで変更されません。 . このコマンドは groff 拡張です。 . . .x-command f "n\ s" .xsub font フォント位置\~\c .argument n (非負整数) に、フォント名\~\c .argument s (テキストの 1 単語) のフォントを組み込みます。 .BR groff_font (5) を参照してください。 . . .x-command H n .xsub Height 文字の高さを .argument n (正整数、単位はスケールドポイント\~\c .unit z ) に設定します。 . 古典的な troff は、かわりに単位としてポイント (\c .unit p ) を使用していました。 .BR 互換性 の節を参照してください。 . . .x-command i .xsub init デバイスを初期化します。 . これは、導入部の 3 番目のコマンドです。 . . .x-command p .xsub pause 解釈されますが、無視されます。 . 古典的な文書には、「 .I デバイスを停止します。 .IR リスタート .I できます 」とあります。 . . .x-command r "n\ h\ v" .xsub resolution .argument n は解像度を表し、 .argument h はそのデバイスの最小水平移動量、 .argument v は最小垂直移動量を表します。 すべての引数は正整数で、単位は 1 インチ当たりの基本単位\~\c .unit u です。 . これは、導入部の 2 番目のコマンドです。 . . .x-command S n .xsub Slant 傾斜を .argument n 度 (整数、単位は基本単位\~\c .unit u ) に設定します。 . . .x-command s .xsub stop 現在のファイルの処理を終了します。 すべての troff 中間出力の最後のコマンドとして発行されます。 . . .x-command t .xsub trailer もしあれば、トレイラ情報を生成します。 . .IR groff では、実際には単に無視されます。 . . .x-command T xxx .xsub Typesetter デバイスの名前を .argument xxx に設定します。 これは後に続く空白文字で終了する文字列です。 . 可能なデバイス名は、groff の .B -T オプションのものと同じです。 . これは、導入部の最初のコマンドです。 . . .x-command u n .xsub underline スペースの下線を設定します。 . .argument n が 1 の場合、スペースの下線を引き始め、 .argument n が 0 の場合、スペースの下線を終了します。 . これは .I nroff モードにおける .B cu リクエストに必要であり、その他の場合は無視されます。 . このコマンドは groff 拡張です。 . . .x-command X anything .xsub X-escape 文字列 .argument anything を解釈せずにデバイスに送ります。 . 後に続く行が .B + 文字で始まっている場合、その行は継続行として以下のように解釈されます。 . .B + は無視され、かわりに改行文字がデバイスに送られます。 そして、行の残りは解釈されずに送られます。 . 同様にして、最初の文字が .B + 文字でない行まで、後に続くすべての行に適用されます。 . このコマンドは .I groff エスケープシーケンスである .BR \*[@backslash]X によって生成されます。 . この行の継続機能は groff 拡張です。 . . .\" -------------------------------------------------------------------- .SS "旧式のコマンド" .\" -------------------------------------------------------------------- . .I 古典的な troff の出力では、ほとんどの場合、水平移動と 1 文字の印字とが組合わさった とても奇妙なコマンドを用いて、1 文字の出力が行われます。 . このコマンドにはコマンドコードがなく、厳密に 2 つの数字と 1 つの文字からなる、3 文字の引数によって表現されます。 . .TP .argument ddc 右へ、基本単位\~\c .unit u で .argument dd (厳密に 2 桁の 10 進数) だけ移動し、 文字\~\c .argument c を印字します。 . .RS .P groff では、このコマンドの前後や中に、任意個の構文上の空白を 入れることができます。 . 唯一、同じ行の前にあるコマンドが可変長の引数を持っている場合にのみ、 区切りの空白が必須となります。 . .I 古典的な .IR troff では、これらのコマンドやその他のコマンドの大きなかたまりが、 ほとんどの場合空白なしに使用されていました。 そのためこのような出力は、ほとんど解読不能でした。 . .RE . .P 現代の高解像度デバイスにとって、このコマンドは理にかなったものではありません。 というのは、文字の移動幅が 2 桁の 10 進数で表現できないほど 大きくなり得るからです。 . groff では、これらは以下のデバイスでのみ使用されます。 .BR X75 , .BR X75-12 , .BR X100 そして .BR X100-12 。 . その他のデバイスには、 コマンド .B t と\~\c .B u が、より適した機能を提供します。 . . .\" -------------------------------------------------------------------- .SH "後処理" .\" -------------------------------------------------------------------- . .I roff の後処理プログラムは、中間出力を、 デバイスに送られる「作用」に変換する働きを持つプログラムです。 . デバイスは、プリンタのようなハードウェアでもいいですし、あるソフトウェアの、 画像またはテキスト処理に適したファイル形式でも構いません。 . .I groff の処理系は、これらの後処理プログラムの作成が簡単になるような、 強力な手法を提供しています。 .P それぞれのデバイスに共通のインタフェースを持つクラスのメソッドを介して、 中間出力をパースしたり、得られた情報をデバイスに送るライブラリ関数が あります。 . .I groff の後処理プログラムがしなければならないのは、 このクラスのメソッドを再定義することだけです。 . 詳細は、 .BR 関連ファイル 節のリファレンスを参照してください。 . . .\" -------------------------------------------------------------------- .SH "使用例" .\" -------------------------------------------------------------------- . この節では、同一の入力から 3 つの異なるデバイス用に生成された中間出力を 示します。 . この入力は、コマンドラインから groff に与えた .I hell world という文です。 . .Topic 高解像度デバイス .I ps . .RS . .P .ShellCommand echo "hell world" | groff -Z -T ps . .P .nf .ft CB x T ps x res 72000 1 1 x init p1 x font 5 TR f5 s10000 V12000 H72000 thell wh2500 tw H96620 torld n12000 0 x trailer V792000 x stop .ft P .fi .RE . .P この出力を後処理プログラム .BR grops (1) に与えることで、その PostScript ファイル形式が得られます。 . . .Topic 低解像度デバイス .I latin1 . .RS . .P これは、位置指定が小さなスケールで行われることを除いて、 高解像度デバイスの時と同じです。 . いくつかのコメント ( .IR # で始まる行) は、意味を明確にするために追加しました。 これらはフォーマッタによって生成されたものではありません。 . .P .ShellCommand echo "hell world" | groff -Z -T latin1 . .P .nf .I # 導入部 .ft CB x T latin1 x res 240 24 40 x init .I # 新しいページの開始 .ft CB p1 .I # フォントの設定 .ft CB x font 1 R f1 s10 .I # ページの初期位置指定 .ft CB V40 H0 .I # テキスト 'hell' の出力 .ft CB thell .I # 空白を通知し、それを水平ジャンプによって行います .ft CB wh24 .I # テキスト `world' の出力 .ft CB tworld .I # 改行を通知します。しかし何もしません。なぜなら ... .ft CB n40 0 .I # ... 文書の終りに達したからです。 .ft CB x trailer V2640 x stop .ft P .fi .RE . .P この出力を後処理プログラム .BR grotty (1) に与えることで、整形されたテキスト文書が得られます。 . . .Topic 古典的形式の出力 . .RS . .P 現在のプリンタに比べて、コンピュータのモニタはとても解像度が低いので、 X のデバイスへの中間出力には、2 桁の数字の移動量を伴う 飛び書き (jump-and-write) コマンドが使用できます。 . .P .ShellCommand echo "hell world" | groff -Z -T X100 . .P .nf .ft CB x T X100 x res 100 1 1 x init p1 x font 5 TR f5 s10 V16 H100 .I # 旧式の飛び書きコマンドでテキストを出力 .ft CB ch07e07l03lw06w11o07r05l03dh7 n16 0 x trailer V1100 x stop .ft P .fi .RE . .P この出力を後処理プログラム .BR xditview (1x) や .BR gxditview (1) に与えることで、X に表示することができます。 . .P 旧式の飛び書きコマンドのために、古典的な出力中のテキスト群は、 ほとんど解読不能です。 . . .\" -------------------------------------------------------------------- .SH "互換性" .\" -------------------------------------------------------------------- . .I 古典的な troff の中間出力言語は、 .IR [97] で初めて文書化されました。 . .I groff の中間出力フォーマットは、以下の特徴を除いてこの仕様書と互換性があります。 .Topic 古典的な準デバイス非依存性は、まだ実装されていません。 . .Topic 古いハードウェアは、現在我々が使用しているものとは非常に異なっています。 . そのため、groff のデバイスも、古典的な troff のものと基本的に異なっています。 . 例えば、古典的な PostScript デバイスは .I post と呼ばれており、1 インチ当たり 720 単位の解像度を持っていました。 一方 groff の .I ps デバイスは、1 インチ当たり 72000 単位の解像度を持っています。 . おそらく古典的な準デバイス非依存性に似た、スケールしなおす機構を 実装すれば、これらは現代の groff に統合することができるかもしれません。 . .Topic B スプラインコマンド .B D~ は中間出力のパーサによって正しく扱われますが、 いくつかの後処理プログラムには描画ルーチンが実装されていません。 .Topic groff では、コマンド .B s と .B x H の引数の単位は、暗黙的にスケールドポイント\~\c .unit z ですが、古典的な troff の単位はポイント (\c .unit p ) です。 . これは非互換なのではなく、互換性のある拡張です。 というのも、古典的なテキストデバイスや groff のテキストデバイスを含む すべてのデバイスにおいて、 .I sizescale パラメータなしでどちらの単位も一致するからです。 . sizescale パラメータを持つ数少ない groff のデバイスも、 存在しないか、違う名前をしているか、異なる解像度を持っているように見えます。 . したがって、古典的なデバイスとの衝突はほとんど起こらないでしょう。 . .ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\ .Topic コマンド .BR Dp , .BR DP , .B Dt の後に発生する位置の変更は非論理的ですが、古いバージョンの groff が この機能を使用しているので、互換性のために残してあります。 .\} \" @STUPID_DRAWING_POSITIONING .el \{\ .Topic groff 拡張である .B D コマンドの後の位置に、一時、多少の混乱がありました。 . この混乱は、すべての groff の描画コマンドに対して古典的な規則を 確立することにより明確にされました。 . .RS .P .I 図形オブジェクトが描画された後の位置は、そのオブジェクトの終端です。 .I 円や楕円の「終端」は右端です。 .RE . .P この規則によって、上記の描画コマンドに対して指定される位置は、 とても自然になりました。 .\} \" @STUPID_DRAWING_POSITIONING . .P groff と古典的な troff との違いは、 .BR groff_diff (7) に文書化されています。 . . .\" -------------------------------------------------------------------- .SH "関連ファイル" .\" -------------------------------------------------------------------- . .TP .BI /usr/share/groff_font/dev name /DESC デバイス .IR name 用のデバイス記述ファイルです。 . .TP .IB \[la]groff_source_dir\[ra] /src/libs/libdriver/input.cpp 中間出力のパーサと後処理プログラムを定義しています。 . このファイルは、 .I groff ソースツリーのトップディレクトリ (例えば .IR @GROFFSRCDIR@ ) から相対的に置かれます。 . このパーサは、 .I groff の中間出力フォーマットの最終的な仕様書となります。 . . .\" -------------------------------------------------------------------- .SH "関連項目" .\" -------------------------------------------------------------------- . .BR groff (7) のような表記は、マニュアルページを指しています。 これは、man-page 文書システムのセクション\~\c .I 7 にある .I groff を指しています。 . この例のマニュアルページを読む場合は、デスクトップのヘルプシステムの セクション\~7 を探すか、シェルプロンプトから以下のように呼び出してください。 . .RS .P .ShellCommand man 7 groff .RE . .P 詳細は .BR man (1) を参照してください。 . .TP .BR groff (1) オプション .B -Z についてと、groff のさらなる読み物。 . .TP .BR groff (7) 数値の単位やエスケープシーケンスのような .I groff 言語の詳細について。 . .TP .BR groff_font (5) .B DESC ファイルのデバイススケールパラメータの詳細について。 . .TP .BR troff (1) デバイス非依存の中間出力を生成します。 . .TP .BR roff (7) 歴史的な側面と、roff システムの一般的な構造について。 . .TP .BR groff_diff (7) groff の中間出力と古典的な troff の中間出力との違いについて。 . .P .BR \%grodvi (1), .BR \%grohtml (1), .BR \%grolbp (1), .BR \%grolj4 (1), .BR \%grops (1), .BR \%grotty (1) .br .RS groff の後処理プログラム。 .RE . .P 1 つの文書で groff システムのすべての側面を扱っているものとしては、 .I groff info .IR ファイル を参照してください。 . これは統合されたヘルプシステムで読むことができ、 .BR emacs (1) の中で、もしくはシェルプロンプトから以下のようにして参照できます。 . .RS .ShellCommand info groff .RE . .P .I 古典的な troff の出力言語 は、AT&T ベル研究所の 2 つの CSTR 文書に記述されており、 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html \ "ベル研究所の CSTR のサイト" から、オンラインで入手できます。 . .TP .I [CSTR #97] .I Brian Kernighan によって書かれた .I A Typesetter-independent TROFF は、出力言語に関する最初の文書であり、最も簡潔なものです。 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz CSTR\~#97 を参照してください。 . .TP .I [CSTR\~#54] .I J.\& F.\& Osanna と .I Brian Kernighan によって書かれた 1992 年版の .I Nroff/\:Troff User's Manual は、出力言語に関しては .I [CSTR\~#97] ほど簡潔ではありません。 .URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz CSTR\~#54 を参照してください。 . . .\" -------------------------------------------------------------------- .SH "作者" .\" -------------------------------------------------------------------- . Copyright (C) 1989, 2001, 2002, 2003 Free Software Foundation, Inc. .P この文書は、FDL (GNU Free Documentation License) バージョン 1.1 か それ以降のものに基づいて配布されています。 . あなたは、このパッケージとともに FDL のコピーを受け取っているはずですが、 これは .URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU のコピーレフトのサイト" からもオンラインで入手可能です。 . .P この文書は GNU の roff ディストリビューションである .IR groff の一部です。 . これは、出力言語の .I groff 拡張部分のみを記述した以前の版 \- GPL にて公開 \- に基づいています。 . これは 2002 年に .MTO bwarken@mayn.de "Bernd Warken" によって書き直され、 .MTO wl@gnu.org "Werner Lemberg" -よって保守されています。 +によって保守されています。 . .\" -------------------------------------------------------------------- .\" Emacs settings .\" -------------------------------------------------------------------- .\" .\" Local Variables: .\" mode: nroff .\" End: diff --git a/ja_JP.eucJP/man/man7/hier.7 b/ja_JP.eucJP/man/man7/hier.7 index f3b52c3913..bb9f7d6c83 100644 --- a/ja_JP.eucJP/man/man7/hier.7 +++ b/ja_JP.eucJP/man/man7/hier.7 @@ -1,823 +1,823 @@ .\" Copyright (c) 1990, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)hier.7 8.1 (Berkeley) 6/5/93 .\" %FreeBSD: src/share/man/man7/hier.7,v 1.91 2003/11/22 06:08:59 scottl Exp % .\" .\" $FreeBSD$ .Dd June 5, 1993 .Dt HIER 7 .Os .Sh 名称 .Nm hier .Nd ファイルシステムのレイアウト .Sh 解説 ファイルシステムの階層構成についての概略です。 .Bl -tag -width "/stand/" .It Pa / ファイルシステムのルートディレクトリ。 .It Pa /bin/ ユーザ用ユーティリティの基本的なもの。 シングルユーザ環境、マルチユーザ環境どちらでも使用する。 .It Pa /boot/ オペレーティングシステムのブートストラップ中に使用される プログラムと設定ファイル。 .Pp .Bl -tag -width defaults/ -compact .It Pa defaults/ デフォルトのブートストラップ用設定ファイル。 .Xr loader.conf 5 参照。 .It Pa kernel/ カーネルの pure な実行可能ファイル (ブート時にメモリに読み込まれる オペレーティングシステム)。 .It Pa modules/ サードパーティのロード可能なカーネルモジュール。 .Xr kldstat 8 参照。 .El .It Pa /cdrom/ CD-ROM ドライブのデフォルトマウントポイント .Xr ( sysinstall 8 が作成します)。 .It Pa /compat/ 通常は、 .Pa /usr/compat へのリンクです。 そうでない場合、 .Pa /usr/compat コメントがあてはまります。 .Xr ( sysinstall 8 が作成します)。 .It Pa /dev/ ブロックデバイスおよびキャラクタデバイスファイル。 .Pp .Bl -tag -width ".Pa fd/" -compact .It Pa fd/ ファイル記述子ファイル。 .Xr \&fd 4 参照。 .El .It Pa /dist/ .Xr sysinstall 8 が使用するマウントポイント。 .It Pa /etc/ システムの設定ファイル、およびスクリプト。 .Pp .Bl -tag -width "disklabels/" -compact .It Pa defaults/ デフォルトのシステム設定ファイル。 .Xr rc 8 参照。 .It Pa gnats/ gnats 設定ファイル。 .Xr send-pr 1 参照。 .It Pa isdn/ isdn4bsd の設定ファイル。 .Xr isdnd 8 参照。 .It Pa localtime ローカルタイムゾーン情報。 .Xr ctime 3 参照。 .It Pa mail/ sendmail の制御情報。 .It Pa mtree/ mtree 設定ファイル。 .Xr mtree 8 参照。 .It Pa namedb/ named 設定ファイル。 .Xr named 8 参照。 .It Pa pam.d/ プラグ可能認証モジュール (Pluggable Authentication Modules; PAM) ライブラリの設定ファイル。 .Xr pam 8 参照。 .It Pa periodic/ .Xr cron 8 により、毎日/毎週/毎月実行されるスクリプト。 .Xr periodic 8 参照。 .It Pa ppp/ .Xr ppp 8 ppp 設定ファイル。 .Xr ppp 8 参照。 .It Pa ssl/ OpenSSL 設定ファイル。 .El .It Pa /kernel カーネルの pure な実行可能ファイル (ブート時にメモリに読み込まれる オペレーティングシステム)。 .It Pa /modules/ ロード可能なカーネルモジュール。 .Xr kldstat 8 参照。 .It Pa /lib/ .Pa /bin と .Pa /sbin のバイナリに必要な、重要なシステムライブラリ。 .It Pa /libexec/ .Pa /bin と .Pa /sbin のバイナリに必要な、重要なシステムユーティリティ。 .It Pa /mnt/ 通常、システム管理者が一時的なマウントポイントとして使用する 空のディレクトリ。 .It Pa /proc/ プロセスファイルシステム。 .Xr procfs 5 , .Xr mount_procfs 8 参照。 .It Pa /rescue/ 緊急回復時に使用される、静的にリンクされたプログラム群です。 .Xr rescue 8 を参照してください。 .It Pa /root/ root のホームディレクトリ。 .It Pa /sbin/ システムプログラム、および基本的な管理者用ユーティリティ。 シングルユーザ環境、マルチユーザ環境どちらでも使用する。 .It Pa /stand/ スタンドアロン環境で使用されるプログラム。 .It Pa /tmp/ システムリブートをまたがった永続性が保証されない、一時ファイル。 .It Pa /usr/ ユーザ用ユーティリティ、およびアプリケーションの大部分を含む。 .Pp .Bl -tag -width "libdata/" -compact .It Pa bin/ 一般的なユーティリティ、プログラミングツール、アプリケーション。 .It Pa compat/ Linux 等の他のオペレーティングシステムとのバイナリ互換性をサポートするために 必要なファイル .Xr ( sysinstall 8 が作成します)。 .It Pa games/ 有用でちょっとふざけたプログラム。 .It Pa include/ 標準 C 言語インクルードファイル。 .Pp .Bl -tag -width "kerberos5/" -compact .It Pa arpa/ インターネットサービスプロトコルのための C 言語インクルードファイル。 .It Pa cam/ Common Access Methods Layer 用 C インクルードファイル。 .Bl -tag -width "kerberos5/" -compact .It Pa scsi/ CAM 上の SCSI デバイス。 .El .It Pa dev/ 様々な .Fx デバイスのプログラミング用の C インクルードファイル。 .Bl -tag -width "kerberos5/" -compact .It Pa ic/ ドライバ/バス独立なハードウェア回路を記述する、様々なヘッダファイル。 .It Pa ofw/ OpenFirmware サポート。 .It Pa ppbus/ パラレルポートバス。 .Xr ppbus 4 参照。 .It usb/ USB サブシステム。 .It Pa utopia/ ATM インタフェース用の物理チップドライバ。 .Xr utopia 4 参照。 .It Pa wi/ .Xr wi 4 WaveLAN ドライバ。 .El .It Pa fs/ .Bl -tag -width "kerberos5/" -compact .It Pa fdescfs/ プロセス毎のファイル記述子ファイルシステム。 .It Pa fifofs/ .St -p1003.1 FIFO ファイルシステム。 .It Pa msdosfs/ MS-DOS ファイルシステム。 .It Pa ntfs/ NTFS ファイルシステム。 .It Pa nullfs/ ループバックファイルシステム。 .It Pa nwfs/ NetWare ファイルシステム。 .It Pa portalfs/ ポータルファイルシステム。 .It Pa procfs/ プロセスファイルシステム。 .It Pa smbfs/ SMB/CIFS ファイルシステム。 .It Pa udf/ UDF ファイルシステム。 .It Pa umapfs/ uid/gid マッピングを変えるファイルシステム .It Pa unionfs ユニオンファイルシステム。 .El .It Pa g++/ GNU C++ 言語インクルードファイル。 .Bl -tag -width "kerberos5/" -compact .It Pa std/ GNU C++ 言語 libstdc++ インクルードファイル。 .El .It Pa isc/ ISC ユーティリティライブラリ libisc インクルードファイル。 .It Pa isofs/ .Bl -tag -width "kerberos5/" -compact .It Pa cd9660/ iso9660 形式ファイルシステム。 .El .It Pa libmilter/ libmilter 用の C インクルードファイルであり、 .Xr sendmail 8 メールフィルタ の API です。 .It Pa machine/ マシン固有機能の C 言語インクルードファイル。 .It Pa net/ その他のネットワーク機能用 C 言語インクルードファイル。 .It Pa netatalk/ Appletalk プロトコル。 .It Pa netatm/ ATM のインクルードファイル。 .Xr atm 8 参照。 .It Pa netinet/ インターネット標準プロトコル用 C 言語インクルードファイル。 .Xr inet 4 参照。 .It Pa netinet6/ インターネットプロトコルバージョン 6 用の C インクルードファイル。 .Xr inet6 4 参照。 .It Pa netipx/ IPX/SPX プロトコルスタック。 .It Pa netkey/ カーネルの鍵管理サービス。 .It Pa netnatm/ NATM インクルードファイル。 .Xr natm 4 参照。 .It Pa netsmb/ SMB/CIFS リクエスタ。 .It Pa nfs/ NFS (Network File System) 用 C 言語インクルードファイル。 .It Pa objc/ Objective C のインクルードファイル。 .It Pa posix4/ POSIX リアルタイム拡張のインクルードファイル。 .Xr p1003_1b 9 参照。 .It Pa openssl/ OpenSSL (Cryptography/SSL ツールキットの) ヘッダ。 .It Pa pccard/ PC-CARD コントローラ。 .It Pa protocols/ Berkeley サービスプロトコル用 C 言語インクルードファイル。 .It Pa readline/ ユーザからの一行入力機能 (編集機能付き)。 .Xr readline 3 参照。 .It Pa rpc/ リモート手続き呼び出し。 .Xr rpc 3 参照。 .It Pa rpcsvc/ RPC サービス構造の定義。 .Xr rpc 3 参照。 .It Pa security/ PAM。 .Xr pam 8 参照。 .It Pa sys/ システム用 C 言語インクルードファイル (カーネルデータ構造)。 .\" .It Pa tcl/ .\" Tcl 言語。 .\" .Xr Tcl n .\" 参照。 .\" .Bl -tag -width "kerberos5/" -compact .\" .It Pa generic/ .\" ??? .\" .It Pa unix/ .\" ??? .\" .El .It Pa ufs/ UFS (U-word File System) 用 C 言語インクルードファイル。 .Bl -tag -width "kerberos5/" -compact .It Pa ffs/ Fast filesystem。 .It Pa ufs/ UFS ファイルシステム。 .El .It Pa vm/ 仮想記憶。 .Xr vmstat 8 参照。 .El .Pp .It Pa lib/ アーカイブライブラリ。 .Bl -tag -width Fl -compact .It Pa aout/ a.out アーカイブライブラリ。 .It Pa compat/ 互換性維持用の共有ライブラリ。 .Bl -tag -width Fl -compact .It Pa aout/ a.out 後方互換ライブラリ。 .El .El .Pp .It Pa libdata/ その他のユーティリティデータファイル。 .Bl -tag -width Fl -compact .It Pa doscmd/ doscmd が使用するファイル (ドライバ、フォント等)。 .Xr doscmd 1 参照。 .Bl -tag -width 6n -compact .It Pa fonts/ doscmd が使用するフォント。 .El .It Pa gcc/ ??? .It Pa ldscripts/ リンカスクリプト。 .Xr ld 1 参照。 .It Pa lint/ さまざまな lint 用ライブラリ (事前に構築されている)。 .Xr lint 1 参照。 .It Pa stallion/ Stallion シリアルコントローラ用ファームウェアイメージ。 .Xr stl 4 参照。 .El .Pp .It Pa libexec/ システムデーモンおよびシステムユーティリティ。 (他のプログラムから実行されるもの)。 .Bl -tag -width Fl -compact .It Pa aout/ a.out 実行形式を操作するユーティリティ。 .It Pa elf/ ELF 実行形式を操作するユーティリティ。 .It Pa lpr/ LP プリントシステムのユーティリティとフィルタ。 .Xr lpr 1 参照。 .It Pa sendmail/ .Xr sendmail 8 バイナリ。 .Xr mailwrapper 8 参照。 .It Pa sm.bin/ .Xr sendmail 8 用制限付きシェル。 .Xr smrsh 8 参照。 .El .Pp .It Pa local/ ローカルの実行可能ファイル、ライブラリなど。 .Fx ports フレームワークのデフォルトのインストール先としても使用されます。 local/以下では、 .Nm で /usr に関して 記述された一般的な配置が使用されます。 例外は、man ディレクトリ (local/share/ の下ではなく local/ の直下に存在)、 ports のドキュメント (share/doc// に置かれます)、 /usr/local/etc (/etc の模倣) です。 .It Pa obj/ アーキテクチャ依存のターゲットツリー。 /usr/src ツリーを構築することで作成される。 .It Pa ports/ .Fx ports コレクション (オプション扱い)。 .It Pa sbin/ (ユーザによって実行される) システムデーモン、およびシステムユーティリティ。 .It Pa share/ アーキテクチャに依存しないファイル。 .Pp .Bl -tag -width "calendar/" -compact .It Pa calendar/ 事前に組み立てられた calendar ファイルいろいろ。 .Xr calendar 1 参照。 .It Pa dict/ 単語リスト。 .Xr look 1 参照。 .Pp .Bl -tag -width Fl -compact .It Pa freebsd .Fx 固有の術語、固有の名前、隠語。 .It Pa words 一般の単語 .It Pa web2 Webster's 2nd International からの単語 .It Pa papers/ リファレンスデータベース。 .Xr refer 1 参照。 .El .Pp .It Pa doc/ その他の文書。 ( .Tn USENIX association から入手できる) .Bx マニュアルのほとんどのソース。 .Bl -tag -width Fl -compact .It Pa FAQ/ しばしば行なわれる質問とその答え (Frequently Asked Questions)。 .It Pa IPv6/ IPv6 の実装に関する注。 .It Pa bind/ BIND (Berkeley Internet Name Domain) に属する文書。 .It Pa es/ /usr/share/doc 中の文書のスペイン語への翻訳。 .It Pa handbook/ .Fx ハンドブック .It Pa ja/ /usr/share/doc 中の文書の日本語への翻訳。 .It Pa ncurses/ ncurses に属する HTML 文書。 .Xr ncurses 3X 参照 .It Pa ntp/ Network Time Protocol に属する HTML 文書。 .It Pa papers/ UNIX 関連の論文 .It Pa psd/ UNIX プログラマ用補助文書 .It Pa ru/ /usr/share/doc 中の文書のロシア語への翻訳。 .It Pa smm/ UNIX システム管理者用マニュアル .It Pa tutorials/ .Fx チュートリアル。 .It Pa usd/ UNIX ユーザ用補助文書 .It Pa zh/ /usr/share/doc 中の文書の中国語への翻訳。 .El .Pp .It Pa examples/ 一般ユーザやプログラマ向けのさまざまな用例。 .It Pa games/ 各種のゲームで使用される ASCII テキストファイル。 .It Pa groff_font/ デバイス名ごとに用意されたデバイス記述ファイル。 .It Pa info/ GNU Info ハイパーテキストシステム。 .It Pa isdn/ ISDN。 .It Pa locale/ ローカル化関係のファイル。 .Xr setlocale 3 参照。 .It Pa man/ マニュアルページ。 .It Pa me/ me マクロパッケージで使用するマクロ。 .Xr me 7 参照。 .It Pa misc/ その他システム全体の ASCII テキストファイル。 .Bl -tag -width Fl -compact .It Pa fonts/ ??? .It Pa pcvtfonts/ pcvt フォント。 .Xr pcvt 4 参照。 .It Pa termcap 端末の特性を記述するデータベース。 .Xr termcap 5 参照。 .El .It Pa mk/ make 用テンプレート。 .Xr make 1 参照。 .It Pa nls/ 各国語サポート (National Lanuguage Support) ファイル。 .Xr mklocale 1 参照。 .It Pa pcvt/ pcvt の文書とその他の例。 .Xr pcvt 4 参照。 .It Pa security/ .Xr mac_lomac 4 等のセキュリティポリシ用のデータファイル。 .It Pa sendmail/ .Xr sendmail 8 の設定ファイル。 .It Pa skel/ 新しいアカウントのための . (ドット) ファイルの例。 .It Pa syscons/ syscons が使用するファイル。 .Xr syscons 4 参照。 .Bl -tag -width "scrnmaps/xx" -compact .It Pa fonts/ コンソールフォント。 .Xr vidcontrol 1 と .Xr vidfont 1 参照。 .It Pa keymaps/ コンソールキーボードマップ。 .Xr kbdcontrol 1 と .Xr kbdmap 1 参照。 .It Pa scrnmaps/ コンソールスクリーンマップ。 .El .It Pa tabset/ 各種端末用タブ記述ファイル。termcap ファイルの中で使用される。 .Xr termcap 5 参照。 .It Pa tmac/ テキスト処理マクロ。 .Xr nroff 1 および .Xr troff 1 参照。 .It Pa vi/ .Xr vi 1 のローカライズサポートとユーティリティ。 .It Pa zoneinfo/ タイムゾーン設定情報。 .Xr tzfile 5 参照。 .El .It Pa src/ .Bx とサードバーティとローカルのソースファイル。 .Pp .Bl -tag -width "kerberos5/" -compact .It Pa bin/ /bin 内のファイルのソース。 .It Pa contrib/ 寄贈されたソフトウェアのソース。 .It Pa crypto/ 寄贈された暗号化ソフトウェアのソース。 .It Pa etc/ /etc 内のファイルのソース。 .It Pa games/ /usr/games 内のファイルのソース。 .It Pa gnu/ -GNU Public Licence で保護されたユーティリティ。 +GNU General Public License で保護されたユーティリティ。 .It Pa include/ /usr/include 内のファイルのソース。 .It Pa kerberos5/ Kerberos version 5 のビルドインフラストラクチャ。 .It Pa lib/ /usr/lib 内のファイルのソース。 .It Pa libexec/ /usr/libexec 内のファイルのソース。 .It Pa release/ .Fx のリリースを生成するために必要なファイル。 .It Pa sbin/ /sbin 内のファイルのソース。 .It Pa secure/ /usr/src/crypto 中のファイル用のビルドディレクトリ。 .It Pa share/ /usr/share 内のファイルのソース。 .It Pa sys/ カーネルのソースファイル。 .It Pa tools/ .Fx のメンテナンスとテストに使用するツール。 .It Pa usr.bin/ /usr/bin 内のファイルのソース。 .It Pa usr.sbin/ /usr/sbin 内のファイルのソース。 .El .Pp .It Pa X11R6/ X11R6 配布パッケージの実行可能形式ファイル、ライブラリなど (オプション扱い)。 .Bl -tag -width "include/" -compact .It Pa bin/ X11R6 のバイナリ (サーバ、ユーティリティ、ローカルな packages/ports)。 .It Pa etc/ X11R6 の設定ファイルとスクリプト。 .It Pa include/ X11R6 のインクルードファイル。 .It Pa lib/ X11R6 のライブラリ。 .It Pa man/ X11R6 のマニュアルファイル。 .It Pa share/ アーキテクチャ独立なファイル。 .El .El .It Pa /var/ さまざまな用途のログファイル、一時ファイル、遷移的ファイル、 スプールファイル。 .Pp .Bl -tag -width "preserve/" -compact .It Pa account/ システムアカウンティングファイル。 .Pp .Bl -tag -width Fl -compact .It Pa acct 実行アカウントファイル。 .Xr acct 5 参照。 .El .Pp .It Pa at/ 指定した時間に動くコマンドのスケジュールファイル。 .Xr \&at 1 参照。 .Bl -tag -width "preserve/" -compact .It Pa jobs/ ジョブファイルを含むディレクトリ。 .It Pa spool/ 出力スプールファイルを含むディレクトリ。 .El .Pp .It Pa backups/ さまざまなバックアップファイル。 .It Pa crash/ カーネルクラッシュダンプを保存するデフォルトのディレクトリ。 .Xr crash 8 と .Xr savecore 8 参照。 .It Pa cron/ cron が使用するファイル。 .Xr cron 8 参照。 .Bl -tag -width "preserve/" -compact .It Pa tabs/ crontab ファイル。 .Xr crontab 5 参照。 .El .Pp .It Pa db/ システム固有のさまざまなデータベースファイル。自動生成される。 .It Pa empty/ 特別に空のディレクトリが必要なプログラムによって使用される、空のディレクトリ。 例えば、特権分離のために .Xr sshd 8 が使用します。 .Xr sshd 8 参照 .It Pa games/ さまざまなゲームのステータスおよびスコアファイル。 .It Pa heimdal/ Kerberos サーバデータベース。 .Xr kdc 8 参照。 .It Pa log/ さまざまなシステムログファイル。 .Pp .Bl -tag -width Fl -compact .It Pa wtmp login/logout ログ。 .Xr wtmp 5 参照。 .El .Pp .It Pa mail/ ユーザのメールボックスファイル。 .It Pa msgs/ システムメッセージのデータベース。 .Xr msgs 1 参照。 .It Pa preserve/ エディタの不慮の死の際に保存されるファイルを一時的に安置するディレクトリ。 .Xr \&ex 1 参照。 .It Pa quotas/ ファイルシステムのクォータ情報のファイル。 .It Pa run/ ブートされてからのシステムについての各種情報を記述した システム情報ファイル。 .Pp .Bl -tag -width Fl -compact .It Pa named/ .Dq bind ユーザが書き込み可能です。 .Xr named 8 参照。 .It Pa ppp/ コマンドの接続ソケット用に、 .Dq network グループが書き込み可能です。 .Xr ppp 8 参照。 .It Pa utmp 現在のユーザについてのデータベース。 .Xr utmp 5 参照。 .El .Pp .It Pa rwho/ rwho データファイル。 .Xr rwhod 8 , .Xr rwho 1 , .Xr ruptime 1 参照。 .It Pa spool/ さまざまなプリンタ、メールシステムのスプールディレクトリ。 .Pp .Bl -tag -width Fl -compact .It Pa ftp/ 一般に ~ftp となる部分。anonymous ftp のルートディレクトリ。 .It Pa mqueue/ 配送されていないメールのキュー。 .Xr sendmail 8 参照。 .It Pa output/ ラインプリンタ用スプールディレクトリ。 .El .Pp .It Pa tmp/ システムリブートをまたがって保持される、一時ファイル。 .Bl -tag -width Fl -compact .It Pa vi.recover/ vi のリカバリファイルを格納しておくディレクトリ。 .El .It Pa yp NIS マップ。 .El .El .Sh 注 このマニュアルページはデフォルトの .Fx ファイルシステムレイアウトを 記述しており、 各システムの実際の階層構造はシステム管理者の裁量に委ねられています。 よく維持管理されたインストールにおいては、 カスタマイズされた本ドキュメントが付属するでしょう。 .Sh 関連項目 .Xr apropos 1 , .Xr find 1 , .Xr finger 1 , .Xr grep 1 , .Xr ls 1 , .Xr whatis 1 , .Xr whereis 1 , .Xr which 1 , .Xr fsck 8 .Sh 歴史 .Nm マニュアルページは .At v7 で登場しました。 .\"ZZZ: 3.0-RELEASE compliant by N. Kumagai 98-12-26 diff --git a/ja_JP.eucJP/man/man8/mount_nfs.8 b/ja_JP.eucJP/man/man8/mount_nfs.8 index 03bb5968ae..093657c5de 100644 --- a/ja_JP.eucJP/man/man8/mount_nfs.8 +++ b/ja_JP.eucJP/man/man8/mount_nfs.8 @@ -1,349 +1,349 @@ .\" Copyright (c) 1992, 1993, 1994, 1995 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)mount_nfs.8 8.3 (Berkeley) 3/29/95 .\" %FreeBSD: src/sbin/mount_nfs/mount_nfs.8,v 1.40 2003/09/10 08:24:33 ru Exp % .\" .\" $FreeBSD$ .\"" .Dd May 11, 2003 .Dt MOUNT_NFS 8 .Os .Sh 名称 .Nm mount_nfs .Nd NFS (ネットワークファイルシステム) をマウントする .Sh 書式 .Nm .Op Fl 23NPTUbcdiLls .Op Fl D Ar deadthresh .Op Fl I Ar readdirsize .Op Fl R Ar retrycnt .Op Fl a Ar maxreadahead .Op Fl g Ar maxgroups .Op Fl o Ar options .Op Fl r Ar readsize .Op Fl t Ar timeout .Op Fl w Ar writesize .Op Fl x Ar retrans .Ar rhost : Ns Ar path node .Sh 解説 .Nm ユーティリティは、ファイルシステムツリー上の指定された .Ar node にリモートの NFS ファイルシステム .Pq Ar rhost : Ns Ar path をマウントするために、 .Xr mount 2 システムコールを呼び出します。このコマンドは通常、 .Xr mount 8 によって実行されます。このプログラムは、RFC 1094 の Appendix. A および .%T "NFS: Network File System Version 3 Protocol Specification" , Appendix I. に記述されているマウントプロトコルを実装しています。 .Pp デフォルトでは、マウントが成功するまで、 .Nm はリトライを続けます。 この動作は、 .Xr fstab 5 に列挙された、ブート処理に必須なファイルシステムでの使用を意図しています。 必須ではないファイルシステムには、 .Fl b および .Fl R のフラグを使用して、 サーバが利用不可の場合でもブート処理がハングしないようにできます。 .Pp NFS ファイルシステムのマウント中にサーバが応答しなくなった場合、 当該ファイルシステム上の新規または未解決のファイル処理は、 サーバが回復するまで、割り込まれることなくハングします。 このデフォルトの動作を修正するには、 .Fl i と .Fl s のフラグを見てください。 .Pp オプションを以下に示します: .Bl -tag -width indent .It Fl 2 NFS バージョン 2 プロトコルを使用します (デフォルトはバージョン 3 をまず試した後にバージョン 2 を用います)。 NFS バージョン 2 では、 ファイルサイズは 2 ギガバイトに制限されることに注意してください。 .It Fl 3 NFS バージョン 3 プロトコルを使用します。 .It Fl D NQNFSにおいて .Dq "停止サーバ閾 (dead server threshold)" をタイムアウト (round trip timeout) 回数で指定します。 これを越えると .Dq "server not responding" メッセージが表示されます。 .It Fl I readdir での読み取りサイズを指定した値にします。 値は通常 .Dv DIRBLKSIZ の倍数であり、マウントの読み取りサイズ以下です。 .It Fl L .Xr fcntl 2 ロックをネットワーク転送しません。 すべてのロックはローカルとなり、 サーバおよび他の NFS クライアントには見えなくなります。 これにより .Xr rpcbind 8 サービスを実行する必要がなくなり、 .Xr rpc.statd 8 と .Xr rpc.lockd 8 のサーバをクライアント上で実行する必要がなくなります。 本オプションは最初のマウント実行時にのみ尊重され、 マウントオプション更新時には黙って無視されます。 .It Fl N 予約されたソケットポート番号を使用し .Em ません (後述)。 .It Fl P 予約されたソケットポート番号を使います。 このフラグは廃れたものであり、互換性のためだけにあります。 現在、予約されたソケットポート番号をデフォルトで使用します。 (クライアントの root が信頼でき、ネットワークケーブルも安全な場所にあ るが、クライアントのユーザは信頼できないという、まれな場合には 役に立つでしょうが、通常のデスクトップクライアントには当てはまりません。) .It Fl R マウントのリトライ回数を、指定された値にします。 デフォルトのリトライ数は 0 であり、 これは永遠にリトライを続けることを意味します。 各リトライの間隔は 60 秒です。 .It Fl T UDP の代わりに TCP を使います。これは、サーバがクライアントと 同じ LAN ケーブル上にない場合に使うことをお勧めします (注意: この機能は大抵の非 .Bx サーバではサポートされていません)。 .It Fl U TCP NFS マウントであっても、マウントプロトコルに UDP を強制します。 (古い BSD サーバにて必要です。) .It Fl a 先読みブロック数を指定した値に設定します。値は 0 から 4 までの範囲で、 サイズの大きなファイルをシーケンシャルに読む場合、 何ブロック先読みするかを決定します。 .\" ×がうまく表示されないので \[mu] 使用 帯域幅 \[mu] 遅延が大きな状況でマウントする場合に 1 より大きな値をお勧めします。 .It Fl b 最初にサーバの接続に失敗した場合、子プロセスを起動して、 バックグラウンドでマウントを続けようとします。 マルチユーザモードで起動する際、重要でないファイルシステムを .Xr fstab 5 に書いておく場合に役に立ちます。 .It Fl c .Tn UDP マウントポイントに対しては、 .Xr connect 2 を使いません。 これは、標準のポート番号 2049 からのリクエストに答えないサーバや 別の IP アドレスからリクエストに答えるサーバ (サーバがマルチホームの場合に発生し得ます) .Va vfs.nfs.nfs_ip_paranoia sysctl を 0 に設定すると、本オプションがデフォルトになります。 に対しては使う必要があります。 .It Fl d 再送タイムアウト時間を動的に予測しません。これは、 動的に予測される再送タイムアウト時間が非常に短いために、 UDP マウントが高いリトライレートを示しているような場合に有効です。 .It Fl g 認証用のグループリストの最大サイズを、指定した値に設定します。 RFC 1057 ではグループリストのサイズは 16 と記述されていますが、これを 扱えない古いサーバをマウントするときに使うべきです。 多くのグループに属しているユーザに対してマウントポイントから 応答がない場合は、8 を指定してみて下さい。 .It Fl i マウントを割り込み可能とします。これは、応答しないサーバがあるために ファイル関連のシステムコールが遅れるような場合、 プロセスに終了シグナルが送られると、EINTR で システムコールが失敗することを意味します。 .It Fl l NQNFS と NFSV3 において、\fBReaddir_and_Lookup\fR RPCを使うことを 指定します。 このオプションは .Dq "ls -l" するようなときに RPC のトラフィックを減らしますが、 属性と名前のキャッシュをプリフェッチエントリで溢れさせる傾向があります。 このオプションを指定して性能が良くなるのか悪くなるのかを確認して下さい。 バンド幅と遅延の積が大きなネットワークにて最も有用でしょう。 .It Fl o .Fl o フラグの後に、オプションをコンマで区切って並べ指定します。 指定可能なオプションとその意味は .Xr mount 8 を参照してください。 以下の NFS 固有のオプションを使用可能です: .Bl -tag -width indent .It Cm port Ns = Ns Aq Ar port_number 指定したポート番号を NFS 要求に使用します。 デフォルトでは portmapper に問い合わせます。 .It Cm acregmin Ns = Ns Aq Ar seconds .It Cm acregmax Ns = Ns Aq Ar seconds .It Cm acdirmin Ns = Ns Aq Ar seconds .It Cm acdirmax Ns = Ns Aq Ar seconds ファイル属性がキャッシュされたときに、 キャッシュエントリをエクスパイアするためにタイムアウトを計算します。 これらの 4 つの値は、 .Dq ディレクトリ および .Dq 通常 (ディレクトリ以外) の 上限および下限を決定します。 デフォルトでは、 通常ファイルは 3 から 60 秒、 ディレクトリは 30 から 60 秒です。 タイムアウトの算出アルゴリズムはファイルの古さを元にするものです。 -ファイルが古くなると、キャッシュが有効であると見倣す期間も長くなり、 +ファイルが古くなると、キャッシュが有効であると見なす期間も長くなり、 上記限界に近付きます。 .It Cm noinet4 , noinet6 .Dv AF_INET や .Dv AF_INET6 の接続を無効化します。 同じ名前で A レコードと AAAA レコードを持つホストにおいて有用です。 .El .Pp .Ss 歴史的な Fl o Ss オプション .Pp これらのオプションを使用する事は勧められません。 歴史的な .Nm との互換性のためにここに記述してあります。 .Bl -tag -width ".Cm dumbtimer" .It Cm bg .Fl b と同じ。 .It Cm conn .Fl c を指定しない場合と同じ。 .It Cm dumbtimer .Fl d と同じ。 .It Cm intr .Fl i と同じ。 .It Cm lockd .Fl L を指定しない場合と同じ。 .It Cm nfsv2 .Fl 2 と同じ。 .It Cm nfsv3 .Fl 3 と同じ。 .It Cm rdirplus .Fl l と同じ。 .It Cm mntudp .Fl U と同じ。 .It Cm resvport .Fl P と同じ。 .It Cm soft .Fl s と同じ。 .It Cm tcp .Fl T と同じ。 .El .It Fl r データのリードサイズを指定した値にします。この値は通常 1024 以上の 2 のべき乗でなければなりません。これはマウントポイント を頻繁に使っている間に、 .Dq タイムアウトで消失したフラグメント数 が大きくなっていくときに、UDP マウントに対して使います .Pf ( Xr netstat 1 を .Fl s オプション付きで使う ことで、 .Dq タイムアウトで消失したフラグメント数 の値を見ることができます)。 .Fl w オプションも参照 してください。 .It Fl s ソフトマウントを行います。これは、 タイムアウトが決められた .Ar リトライ 回数に達すると、 システムコールが失敗することを意味します。 .It Fl t 指定した値に初期再送タイムアウト時間を設定します。パケット の消失レートの高いネットワークや負荷の高いサーバで行う UDP マウントを チューニングするときに役立ちます。 ファイルシステムがアクティブなときに .Xr nfsstat 1 が高い再送レートを示す場合には、この値を増やしてみて下さい。 一方、再送レートは低いが、応答遅延が長い場合はこの値を減らします。 (通常、 .Fl d オプションをこのオプションとともに使い、 手動でタイムアウトインターバルを調整します。) .It Fl w 指定した値にライトデータサイズを設定します。解説は .Fl r オプションと同様ですが、 .Dq タイムアウトで消失したフラグメント数 は、クライアントのかわりにサーバの値を使います。 .Fl r や .Fl w のオプションは、マウントするサーバが TCP マウントをサポートしていない場合にパフォーマンスを向上させる 最後の手段であることに注意してください。 .It Fl x ソフトマウントの再送タイムアウト回数を設定します。 .El .Sh 関連項目 .Xr mount 2 , .Xr unmount 2 , .Xr fstab 5 , .Xr mount 8 , .Xr nfsd 8 , .Xr nfsiod 8 , .Xr showmount 8 .Sh バグ Sun RPCは UDP (信頼性のないデータグラム) トランスポート層上に 実装されているため、マウントの性能をチューニングしても 限界があります。サーバが同じ LAN ケーブル上にない場合や、 サーバの負荷が高い場合には、 .Tn TCP トランスポートを使うことを強くすすめますが、 残念なことに、ほぼ .Bx 4.4 サーバに限られています。 diff --git a/ja_JP.eucJP/man/man8/mount_std.8 b/ja_JP.eucJP/man/man8/mount_std.8 index 4d2290ea31..bafadb34f0 100644 --- a/ja_JP.eucJP/man/man8/mount_std.8 +++ b/ja_JP.eucJP/man/man8/mount_std.8 @@ -1,165 +1,165 @@ .\" .\" Copyright (c) 1992, 1993, 1994 .\" The Regents of the University of California. All rights reserved. .\" All rights reserved. .\" .\" This code is derived from software donated to Berkeley by .\" Jan-Simon Pendry. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %FreeBSD: src/sbin/mount_std/mount_std.8,v 1.20 2003/10/22 18:25:48 seanc Exp % .\" $FreeBSD$ .\" .Dd May 13, 1996 .Dt MOUNT_STD 8 .Os .Sh 名称 .Nm mount_std , .Nm mount_devfs , .Nm mount_fdescfs , .Nm mount_linprocfs , .Nm mount_procfs .Nd .Dq 標準 ファイルシステムをマウントする .Sh 書式 .Nm mount_ Ns Ar fsname .Op Fl o Ar options .Ar "fs" .Ar mount_point .Sh 解説 .Nm ユーティリティは ``標準'' ファイルシステムをファイルシステムにマウントする一般的な機構です。 .Nm ユーティリティは現在以下のファイルシステムをサポートしています: .Nm devfs , .Nm fdescfs , .Nm linprocfs , .Nm procfs 。 ``標準'' ファイルシステムは: .Bl -enum -offset indent .It 標準の .Fl o オプションだけを受け付けます .Dq ro , .Dq rw , .Dq nodev , .Dq noexec , .Dq nosuid , .Dq union 。 .It ユーザに見える名前と同じ、カーネルファイルシステムモジュール名を持ちます。 .It .Nm ユーティリティでは特別な処理を行う必要は有りません。 .El .Pp オプションを以下に示します: .Bl -tag -width indent .It Fl o .Fl o フラグの後には、コンマで区切ったオプション文字列を指定することができます。 指定可能なオプションとその意味は、 .Xr mount 8 マニュアルページを参照して下さい。 .El .Pp .Nm ユーティリティは 0 番目のコマンドライン引数(呼ばれたコマンド名)を検査し、 マウントすべきファイルシステムを判定します。 これが .Dq Li _ Ns Ar fsname で終らない場合、 .Nm は( .Xr mount 8 と同じく)、ファイルシステムタイプの名前のみが 0 番目の引数に格納されていると -見倣します。 +見なします。 .Nm ユーティリティは、この様にマウントされる分散ファイルシステムのコマンドへの 適切なリンクとして、通常はインストールされます。 各ファイルシステムの機能に関しては、 .Nm mount_ Ns Ar fsname ユーティリティのマニュアルページを御覧下さい。 .Pp ファイルシステムに関する詳細は以下のマニュアルページを参照下さい: .Xr devfs 5 , .Xr fdescfs 5 , .Xr linprocfs 5 , .Xr procfs 5 。 .Sh 診断 .Bl -diag .It argv[0] must end in _fsname .Nm ユーティリティが .Dq Li mount_std の 0 番目の引数のコマンドとして呼ばれました。 .It %s file system not available 固有のファイルシステムタイプがカーネル中に存在せず、 ロード可能なモジュールが見付かりません。 .El .Sh 関連項目 .Xr mount 2 , .Xr unmount 2 , .Xr getvfsbyname 3 , .Xr devfs 5 , .Xr fdescfs 5 , .Xr fstab 5 , .Xr linprocfs 5 , .Xr procfs 5 , .Xr mount 8 .Sh 警告 ``標準'' ファイルシステムは NFS エクスポートできません。 .Sh 歴史 .Nm は .Fx 2.2 から登場しました。 ロード可能なファイルシステムモジュールは .Fx 2.0 から登場しました。 .Dq fdescfs .Dq procfs ファイルシステムタイプは .Fx 2.0 から登場しました; .Dq devfs ファイルシステムタイプは .Fx 2.2 から登場しました; .Dq linprocfs ファイルシステムタイプは .Fx 4.0 から登場しました。 diff --git a/ja_JP.eucJP/man/man8/moused.8 b/ja_JP.eucJP/man/man8/moused.8 index 95e9cc9e52..40b485aeae 100644 --- a/ja_JP.eucJP/man/man8/moused.8 +++ b/ja_JP.eucJP/man/man8/moused.8 @@ -1,664 +1,664 @@ .\" Copyright (c) 1996 .\" Mike Pritchard . All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by Mike Pritchard. .\" 4. Neither the name of the author nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %FreeBSD: src/usr.sbin/moused/moused.8,v 1.43 2003/06/08 14:04:49 charnier Exp % .\" .\" $FreeBSD$ .Dd April 1, 2000 .Dt MOUSED 8 .Os .Sh 名称 .Nm moused .Nd マウスデータをコンソールドライバに渡す .Sh 書式 .Nm .Op Fl DPRacdfs .Op Fl I Ar file .Op Fl F Ar rate .Op Fl r Ar resolution .Op Fl S Ar baudrate .Op Fl a Ar X Ns Op , Ns Ar Y .Op Fl C Ar threshold .Op Fl m Ar N=M .Op Fl w Ar N .Op Fl z Ar target .Op Fl t Ar mousetype .Op Fl 3 Op Fl E Ar timeout .Fl p Ar port .Pp .Nm .Op Fl Pd .Fl p Ar port .Fl i Ar info .Sh 解説 .Nm ユーティリティとコンソールドライバは協力し、 テキストコンソールやユーザプログラムにおけるマウス操作をサポートします。 マウスの仮想化とユーザプログラムへのマウスデータの提供は標準フォーマット にて行われます ( .Xr sysmouse 4 を御覧ください)。 .Pp マウスデーモンはマウスデータの読みとりのために指定されたポートを監視し、 解釈したデータを ioctl を介してコンソールドライバに渡します。 マウスデーモンは、移動、ボタンの押し/離しイベント、 存在するならばローラやホイールの移動も報告します。 ローラ/ホイールの移動は ``Z'' 軸での移動として報告されます。 .Pp マウスポインタが .Xr vidcontrol 1 によって有効にされていれば、 コンソールドライバはマウスポインタをスクリーンに表示し、 カットとペーストの機能を提供します。 .Xr sysmouse 4 をユーザプログラムがオープンすると、コンソールドライバは マウスデータをこのデバイスに送るので、 ユーザプログラムはこのデータを使用できます。 .Pp マウスデーモンがシグナル .Dv SIGHUP を受けとると、マウスポートを再オープンし、自己を再初期化します。 システムがサスペンドされている間にマウスの挿抜を行なった場合に有用です。 .Pp 以下のオプションがあります: .Bl -tag -width indent .It Fl 3 2 ボタンマウスで 3 番目(中)のボタンをエミュレートします。 物理的なボタンで左と右のものを同時に押すとエミュレートされます。 .It Fl C Ar threshold ダブルクリック速度をボタンクリック間最大インターバルとしてミリ秒で指定します。 このオプションを指定しないと、デフォルト値は 500 ミリ秒が仮定されます。 このオプションは、 テキストモードコンソールのカットとペーストの操作においてのみ有効です。 .Xr sysmouse 4 を介してマウスデータを得るユーザプログラムは影響を受けません。 .It Fl D シリアルポートの DTR を下げます。 このオプションが有効なのは、 .Ar mousesystems がマウスプロトコルとして選択されている場合のみです。 .Ar mousesystems モードで 3 ボタンマウスを操作するためには、 DTR ラインを落とすことが必要かもしれません。 .It Fl E Ar timeout 第 3 ボタンエミュレーション (前述) が有効なとき、2 つのボタンが同時に押されたかを判定する前に .Nm ユーティリティは最長 .Ar timeout ミリ秒待ちます。 デフォルトのタイムアウトは 100 ミリ秒です。 .It Fl F Ar rate サポートされていれば、デバイスのレポート頻度(秒あたりの回数)を設定します。 .It Fl I Ar file .Nm ユーティリティのプロセス ID を、指定されたファイルに書きます。 このオプションを指定しないと、プロセス ID は .Pa /var/run/moused.pid に格納されます。 .It Fl P シリアルマウス識別時に、 プラグアンドプレイ COM デバイス列挙処理を開始しません。 .Fl i オプションと共にこのオプションが指定された場合、 .Nm ユーティリティはシリアルマウスに関する有用な情報を表示できません。 .It Fl R シリアルポートの RTS を下げます。 このオプションが有効なのは .Ar mousesystems がプロトコルタイプとして、後述する .Fl t オプションで指定されている場合のみです。 これは前記 .Fl D オプションと共によく使用されます。 .Ar mousesystems モードで 3 ボタンマウスを操作するためには、 RTS と DTR のラインを共に下げる必要があるかもしれません。 .It Fl S Ar baudrate シリアルポートの速度を指定します (1200 から 9600)。 全シリアルマウスがこのオプションをサポートするわけではありません。 .It Fl a Ar X Ns Op , Ns Ar Y マウスの入力を加速または減速します。 線型加速のみです。 1.0 より小さい値は、しばらく減速します。 1.0 より大きい値は、加速します。 1 個の値だけを指定した場合、両方の座標軸での加速を設定します。 .It Fl c マウスによっては、中ボタンを押したイベントを、 左右ボタンが押されたかのようにレポートするものがあります。 このオプションはこれを扱うものです。 .It Fl d デバッグ用のメッセージを有効にします。 .It Fl f デーモンにならずに、フォアグラウンドプロセスとして実行します。 テストやデバッグに有用です。 .It Fl i Ar info 指定された情報を表示し終了します。指定可能な情報を以下に示します: .Pp .Bl -tag -compact -width modelxxx .It Ar port ポート(デバイスファイル)名、例えば .Pa /dev/cuaa0 , .Pa /dev/mse0 , .Pa /dev/psm0 です。 .It Ar if インタフェースタイプ: serial, bus, inport, ps/2 です。 .It Ar type プロトコルタイプ。 .Fl t オプションの説明の後でリストされているものか、 ドライバが .Ar sysmouse データフォーマット標準をサポートする場合には .Ar sysmouse です。 .It Ar model マウスモデル。 .Nm ユーティリティは常にモデルを識別できるわけではありません。 .It Ar all 上記全部。ポート、インタフェース、タイプ、モデルをこの順に一行に表示します。 .El .Pp .Nm ユーティリティは要求された情報を判別できない場合、 ``unknown'' か ``generic'' を表示します。 .It Fl m Ar N=M 物理ボタン .Ar M に論理ボタン .Ar N を割当てます。 このオプションは任意個数指定可能です。 複数の物理ボタンを単一の論理ボタンに割り当て可能です。 この場合、指定された物理ボタンのいずれかが押されている場合、 論理ボタンが押されていることになります。`=' の周りにスペースを入れてはなりません。 .It Fl p Ar port マウスと通信するためのポートとして .Ar port を使います。 .It Fl r Ar resolution デバイスの解像度を設定します; インチあたりのドット数または、 .Ar low , .Ar medium-low , .Ar medium-high , .Ar high のいずれかです。 全デバイスにてこのオプションがサポートされているわけではありません。 .It Fl s シリアルラインのために 9600 ボーを選びます。 全シリアルマウスがこのオプションをサポートしているわけではありません。 .It Fl t Ar type ポートに接続されているマウスのプロトコルタイプを指定します。 以下に列挙されるタイプを陽に指定するか、 .Ar auto を指定して .Nm ユーティリティに適切なプロトコルを自動選択させることができます。 コマンドラインにてこのオプションを指定しないと、 .Fl t Ar auto が仮定されます。 通常では、 .Nm ユーティリティがプロトコルの自動検出ができない場合に必要です ( .Sx マウスデーモンの構成 ) を参照。 .Pp このオプションでプロトコルタイプを指定した場合、 前記 .Fl P オプションが暗示され、プラグアンドプレイ COM デバイス列挙処理が無効になります。 .Pp また、マウスを PS/2 マウスポートに接続している場合、 常に .Ar auto か .Ar ps/2 を選択すべきです。 これは、マウスのブランドやモデルとは関係ありません。 同様に、マウスをバスマウスポートに接続している場合、 .Ar auto か .Ar busmouse を選択してください。 これらのマウスではシリアルマウスプロトコルは動作しません。 .Pp USB マウスでは、プロトコルは .Ar auto であることが必要です。他のプロトコルは USB マウスで動作しません。 .Pp このオプションにおける有効なタイプを以下に列挙します。 .Pp シリアルマウス: .Bl -tag -compact -width mousesystemsxxx .It Ar microsoft Microsoft シリアルマウスプロトコル。 大抵の 2 ボタンマウスはこのプロトコルを使用します。 .It Ar intellimouse Microsoft IntelliMouse プロトコル。 Genius NetMouse, .Tn ASCII Mie Mouse, Logitech MouseMan+, FirstMouse+ もこのプロトコルを使用します。 他のローラ/ホイールを持つマウスもこのプロトコル互換でしょう。 .It Ar mousesystems MouseSystems の 5 バイトプロトコル。 3 ボタンマウスはこのプロトコルを使用するかもしれません。 .It Ar mmseries MM Series マウスプロトコル。 .It Ar logitech Logitech マウスプロトコル。 これは古い Logitech モデルであることに注意。 新しいモデルには .Ar mouseman もしくは .Ar intellimouse を指定します。 .It Ar mouseman Logitech MouseMan と TrackMan のプロトコル。 3 ボタンマウスによってはこのプロトコル互換かもしれません。 MouseMan+ と FirstMouse+ は、このプロトコルではなく、 .Ar intellimouse プロトコルを使用します .It Ar glidepoint ALPS GlidePoint プロトコル。 .It Ar thinkingmouse Kensington ThinkingMouse プロトコル。 .It Ar mmhitab Hitachi タブレットプロトコル。 .It Ar x10mouseremote X10 MouseRemote。 .It Ar kidspad Genius の Kidspad と Easypad のプロトコル。 .It Ar versapad Interlink VersaPad プロトコル。 .El .Pp バスおよび InPort マウス: .Bl -tag -compact -width mousesystemsxxx .It Ar busmouse バスおよび InPort マウスはこのプロトコルのみ使用可能であり、 バスおよび InPort マウスはブランドに依らずこのオプションを 指定する必要があります。 .El .Pp PS/2 マウス: .Bl -tag -compact -width mousesystemsxxx .It Ar ps/2 PS/2 マウスはこのプロトコルのみ使用可能であり、 PS/2 マウスはブランドに依らずこのオプションを 指定する必要があります。 .El .Pp USB マウスでは、 .Ar auto が使用可能な唯一のプロトコルであり、 ブランドにかかわらず USB マウスにはこれを指定すべきです。 .It Fl w Ar N 物理ボタン .Ar N が、ホイールモードボタンとして動作するようにします。 このボタンが押されている間、X 軸および Y 軸の移動は 0 と報告され、 Y 軸の移動は Z 軸の移動に割り付けられます。 後述する .Fl z オプションを使用することにより、 Z 軸の移動を更に仮想ボタンに割り付けることができます。 .It Fl z Ar target Z 軸(ローラ/ホイール)動作を別の軸や仮想ボタンに割り付けます。 有効な .Ar target は以下のいずれかです: .Bl -tag -compact -width x__ .It Ar x .It Ar y X または Y 軸の移動として、検知した Z 軸移動を報告します。 .It Ar N 仮想ボタン .Ar N および .Ar N+1 を押したイベントとして、検知した負/正の Z 軸移動をそれぞれ報告します。 物理ボタン .Ar N と .Ar N+1 が存在する必要はありません。 論理ボタンへの割り付けは Z 軸移動を仮想ボタンへ割り付けた後に行われます。 .It Ar N1 N2 仮想ボタン .Ar N1 および .Ar N2 を押したイベントとして、検知した負/正の Z 軸移動をそれぞれ報告します。 .It Ar N1 N2 N3 N4 2 個のホイールがあり 2 番目のホイールが水平スクロール動作を生成するために使用されるマウス、 およびユーザが加えた水平の力を検知するノブまたはスティック付きのマウスで 有用です。 .Pp 2 番目のホイールの動きは、負の向きが .Ar N3 にマップされ、正の向きが .Ar N4 にマップされます。 ボタン .Ar N3 および .Ar N4 がマウスに実在する場合、このアクションは検出されません。 .Pp 水平移動や 2 番目のローラ/ホイールの動きは常に検出されるわけではないことに 注意してください。 なぜなら、 これらをエンコードするための受け入れられた標準が無いように見えるからです。 .Pp また、水平方向において、左が負であると考えるマウスもいれば、 逆だと考えるマウスもいることにも注意してください。 -更に、2 個のホイールが両方とも垂直に塔載されており、 +更に、2 個のホイールが両方とも垂直に搭載されており、 一方の方向がもう一方の方向とはマッチしないものもあります。 .El .El .Ss マウスデーモンの構成 まず、使用予定マウスのインタフェースタイプを知ることが必要です。 これはマウスのコネクタを見れば分かります。 シリアルアウスは D-Sub の 9 ピンまたは 25 ピンのメスです。 バスおよび InPort のマウスは D-Sub 9 ピンのオスか丸い DIN 9 ピンコネクタです。 PS/2 マウスは小さくて丸い DIN 6 ピンコネクタです。 マウスによってはコネクタを別の形状に変換可能なコネクタが附属しています。 このようなアダプタを使用する場合には、 マウスから一番遠いコネクタの形状を見てください。 USB マウスは、平らな長方形のコネクタを持ちます。 .Pp 次に決めねばならないことは、インタフェースのために使用するポートです。 バス、InPort、PS/2 マウスでは、選択肢はありません: バスおよび InPort マウスは常に .Pa /dev/mse0 を使用し、 PS/2 マウスは常に .Pa /dev/psm0 を使用します。 シリアルマウスの場合、接続可能なポートが複数ありえます。 多くの人が組み込みのシリアルポート .Pa /dev/cuaa0 をマウスに割当てます。 複数の USB マウスをシステムまたは USB ハブに接続可能です。 それらは .Pa /dev/ums0 , /dev/ums1 のようにアクセス可能です。 .Pa シンボリックリンク .Pa /dev/mouse でマウスの実際のポートを指すようにして、 どのマウスポートか後で簡単に分かるようにするのが良いかもしれません。 .Pp 次に適切なマウスプロトコルを選択します。 .Nm ユーティリティはマウスタイプを自動決定可能かもしれません。 .Nm ユーティリティを .Fl i オプションを付けて実行し、表示を見ます。 コマンドがプロトコルタイプを識別した場合、あなたは何も調べる必要はありません。 プロトコルタイプを指定せずにデーモンを起動可能です ( .Sx 使用例 ) を参照。 .Pp コマンドは、マウスドライバが .Ar sysmouse プロトコルをサポートする場合、 .Ar sysmouse と表示するかもしれません。 .Pp 表示される .Dv type と .Dv model は、対象のポインティングデバイスの製品名では必ずしもありませんが、 互換性のあるデバイスの名前でしょう。 .Pp .Fl i オプションがなにも表示しない場合、 .Nm ユーティリティに対して .Fl t オプションを使用し、プロトコルタイプを指定する必要があります。 予測して試行する必要があります。 以下に経験則を示します: .Pp .Bl -enum -compact -width 1.X .It バスおよび InPort マウスはブランドに依らず .Ar busmouse プロトコルを使用します .It PS/2 マウスはブランドに依らず .Ar ps/2 プロトコルを使用します .It USB マウスには .Ar auto プロトコルを指定する必要があります。 .It ほとんどの 2 ボタンシリアルマウスは .Ar microsoft プロトコルをサポートします。 .It 3 ボタンシリアルマウスは .Ar mousesystems プロトコルで動作するかもしれません。動作しない場合には、 三番目(中)ボタンが機能せずに .Ar microsoft プロトコルで動作するでしょう。 3 ボタンシリアルマウスは、期待通り三番目のボタンが動作しつつ .Ar mouseman プロトコルで動作するかもしれません。 .It 3 ボタンマウスには小さなスイッチが付いていて、 ``MS'' と ``PC'' または ``2'' と ``3'' とで選択できるできるようになっている かもしれません。 ``MS'' と ``2'' は通常 .Ar microsoft プロトコルを意味します。 ``PC'' と ``3'' は .Ar mousesystems プロトコルを選択します。 .It マウスにローラやホイールが付いている場合、 .Ar intellimouse プロトコル互換でしょう。 .El .Pp マウスのために選択したプロトコルタイプが正しいかどうかテストする目的で、 現在の仮想コンソールでマウスポインタを有効にします。 .Pp .Dl vidcontrol -m on .Pp マウスデーモンをフォアグラウンドで開始します。 .Pp .Dl moused -f -p Ar _selected_port_ -t Ar _selected_protocol_ .Pp マウスポインタがマウスの移動に伴い、 正しく移動することを確認してください。 そして、カットとペーストの機能を左、右、中のボタンを使用して確認してください。 ^C をタイプすると、コマンドは停止します。 .Ss 複数のマウス システムに接続したマウスと同じ数だけ、マウスデーモンを同時実行可能です; 一つのマウスデーモンが一つのマウスに対応します。 ラップトップコンピュータ組み込みの PS/2 ポインティングデバイスを移動中使用し、 オフィスではドッキングステーション接続のシリアルマウスを使用する 場合に有用です。 マウスデーモンを二つ実行し、アプリケーションプログラム (例えば X Window System) に .Xr sysmouse 4 を使用させます。 するとアプリケーションプログラムは常に両マウスからマウスデータを受け取ります。 シリアルマウスが取り付けられていない場合、 対応するマウスデーモンは移動やボタン状態の変化を検出しませんので、 アプリケーションプログラムは PS/2 マウスのデーモンからのマウスデータ のみを使います。 一方この構成で両方のマウスを接続し同時に両方を動かした場合、 マウスの移動をすべて組み合わせたようにマウスポインタがスクリーン上を移動します。 .Sh 関連ファイル .Bl -tag -width /dev/consolectl -compact .It Pa /dev/consolectl コンソール制御デバイス .It Pa /dev/mse%d バスおよび InPort マウスのドライバ .It Pa /dev/psm%d PS/2 マウスドライバ .It Pa /dev/sysmouse 仮想化されたマウスドライバ .It Pa /dev/ttyv%d 仮想コンソール .It Pa /dev/ums%d USB マウスドライバ .It Pa /var/run/moused.pid 現在実行中の .Nm ユーティリティのプロセス ID .It Pa /var/run/MouseRemote X10 MouseRemote のイベントのための UNIX ドメインストリームソケット .El .Sh 使用例 .Dl moused -p /dev/cuaa0 -i type .Pp .Nm ユーティリティにシリアルポート .Pa /dev/cuaa0 に接続されたマウスのプロトコルタイプを識別させます。 成功すると、コマンドはタイプを表示しますが、 失敗すると ``unknown'' が表示されます。 .Pp .Dl moused -p /dev/cuaa0 .Dl vidcontrol -m on .Pp .Nm ユーティリティが指定されたポートのマウスプロトコルタイプを識別可能な場合、 .Fl t オプション無してデーモンを起動可能であり、 前記のようにマウスポインタをテキストコンソール上で有効にできます。 .Pp .Dl moused -p /dev/mouse -t microsoft .Dl vidcontrol -m on .Pp シリアルポート .Pa /dev/mouse に対してマウスデーモンを起動します。 プロトコルタイプは .Ar microsoft を .Fl t オプションにて陽に指定しています。 .Pp .Dl moused -p /dev/mouse -m 1=3 -m 3=1 .Pp 物理ボタン 3 (右ボタン) を論理ボタン 1 (論理的に左) に、 物理ボタン 1 (左ボタン) を論理ボタン 3 (論理的に右) に、 それぞれ割当てます。 左右のボタンを事実上交換します。 .Pp .Dl moused -p /dev/mouse -t intellimouse -z 4 .Pp Z 軸(ローラ)における負の移動をボタン 4 が押されたものとし、 Z 軸における正の移動をボタン 5 が押されたものとします。 .Sh 警告 .Nm ユーティリティは現在別のコンソールドライバ .Xr pcvt 4 では動作しません。 .Pp パッドデバイスの多くは、 ユーザがパッド表面を ``タップ'' した場合に最初の(左) ボタンが 押されたものとします。 また、ALPS GlidePoint および Interlink VersaPad のモデルによっては、 タップ動作を 4 番目のボタンのイベントとして扱います。 このようなモデルでは、オプション ``-m 1=4'' を使用して、 他のパッドデバイスと同様の効果を得られます。 .Pp 仮想コンソールでのカットとペーストの機能は、 マウスに 3 ボタンあることを仮定しています。 論理ボタン 1 (論理的に左) は、 コンソールのテキスト領域を選択してカットバッファにコピーします。 論理ボタン 3 (論理的に右) は、 選択された領域を拡張します。 論理ボタン 2 (論理的に中) は、 選択されたテキストをテキストカーソル位置にペーストします。 マウスに 2 つしかボタンが無い場合、中央の `ペースト' ボタン は使用できません。 ペースト機能を使用するためには、 .Fl 3 オプションを使用して中ボタンをエミュレートするか、 .Fl m オプションを ``-m 2=3'' のように使用して 物理右ボタンに論理中ボタンを割当てます。 .Sh 関連項目 .Xr kill 1 , .Xr vidcontrol 1 , .Xr keyboard 4 , .Xr mse 4 , .Xr pcvt 4 , .Xr psm 4 , .Xr screen 4 , .Xr sysmouse 4 , .Xr ums 4 .Sh 規格 .Nm ユーティリティは .Dq Plug and Play External COM Device Specification の一部を サポートし、PnP シリアルマウスをサポートします。 しかしながら、シリアルマウスごとに仕様充足の度合が異なりますので、 標準のバージョン 1.0 に完全に従ってはいません。 このように厳密さを欠いた方法でも、シリアルマウスの適切なプロトコルタイプ を常に決定できるわけではありません。 .Sh 作者 .An -nosplit .Nm ユーティリティは、 .An Michael Smith Aq msmith@FreeBSD.org によって書かれました。 このマニュアルは、 .An Mike Pritchard Aq mpp@FreeBSD.org によって書かれました。 コマンドとマニュアルページを、 .An Kazutaka Yokota Aq yokota@FreeBSD.org が更新しました。 .Sh 歴史 .Nm ユーティリティは、 .Fx 2.2 から導入されました。 diff --git a/ja_JP.eucJP/man/man8/named-xfer.8 b/ja_JP.eucJP/man/man8/named-xfer.8 index 387fa1bbc6..54f4c97326 100644 --- a/ja_JP.eucJP/man/man8/named-xfer.8 +++ b/ja_JP.eucJP/man/man8/named-xfer.8 @@ -1,216 +1,216 @@ .\" ++Copyright++ 1985 .\" - .\" Copyright (c) 1985 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" - .\" Portions Copyright (c) 1993 by Digital Equipment Corporation. .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies, and that .\" the name of Digital Equipment Corporation not be used in advertising or .\" publicity pertaining to distribution of the document or software without .\" specific, written prior permission. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL .\" WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES .\" OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT .\" CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL .\" DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR .\" PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS .\" ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS .\" SOFTWARE. .\" - .\" Portions Copyright (c) 1999 by Check Point Software Technologies, Inc. .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies, and that .\" the name of Check Point Software Technologies Incorporated not be used .\" in advertising or publicity pertaining to distribution of the document .\" or software without specific, written prior permission. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND CHECK POINT SOFTWARE TECHNOLOGIES .\" INCORPORATED DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, .\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. .\" IN NO EVENT SHALL CHECK POINT SOFTWARE TECHNOLOGIES INCORPORATED .\" BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR .\" ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER .\" IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT .\" OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" .\" --Copyright-- .\" .\" from named.8 6.6 (Berkeley) 2/14/89 .\" .\" $FreeBSD$ .Dd June 26, 1993 .Dt NAMED-XFER 8 .Os BSD 4 .Sh 名称 .Nm named-xfer .Nd ゾーン転送のための補助エージェント .Sh 書式 .Nm named-xfer .Fl z Ar zone_to_transfer .Fl f Ar db_file .Fl s Ar serial_no .Op Fl d Ar debuglevel .Op Fl l Ar debug_log_file .Op Fl i Ar ixfr_file .Op Fl t Ar trace_file .Op Fl p Ar port# .Op Fl C Ar class .Op Fl S .Op Fl q .Op Fl x Ar src_address .Op Fl T Ar tsig_file .Ar nameserver .Op Sy axfr | ixfr .Sh 解説 .Nm は、 .Xr named 8 によって実行される補助プログラムです。 インターネットネームサーバから呼び出されて、ゾーン情報を受け取ります。 直接実行されることはまれであり、ゾーン転送の問題を解決するために -システム管理者にいよってのみ実行されることがある程度です。 +システム管理者によってのみ実行されることがある程度です。 インターネットネームドメインシステムについての詳細は、 RFC 1033、1034、1035 を参照してください。 .Pp オプションとしては、以下のものがあります: .Bl -tag -width Fl .It Fl z Ar zone_to_transfer 転送されるゾーン名を指定します。 .It Fl f Ar db_file プライマリサーバからゾーンが転送された際に、ゾーンの情報をダンプ (格納) する .Ar db_file のファイル名を指定します。 .It Fl s Ar serial_no 転送されるゾーンの情報のシリアル番号を指定します。プライマリサーバから 得た .Sy SOA RR が、このシリアル番号よりも高いシリアル番号を持たない 場合は、転送は中止されます。 .It Fl d Ar debuglevel デバッグ情報を出力します。 .Ar debuglevel 出力されるメッセージのレベルを決定します。 .It Fl l Ar debug_log_file デバッグメッセージのログファイルを指定します。デフォルトでは システムに依存しますが、通常は .Pa /var/tmp または .Pa /usr/tmp です。このオプションは .Fl d と同時に指定されたときのみ適用されますので注意してください。 .It Fl i Ar ixfr_file .Ar ixfr_file の名前を指定します。 Incremental Zone Transfer (IXFR) によりゾーン変更内容を プライマリサーバから受信すると、 このゾーン変更内容をこのファイルにダンプ (格納) します。 .It Fl t Ar trace_file ゾーン情報転送のプロトコルトレースを格納するトレースファイル .Ar trace_file を指定します。 このオプションはネームサーバそのものをデバッグする人にとってのみ 有益なのかもしれません。 .It Fl p Ar port# デフォルト以外のポート番号を使用するときに指定します。 デフォルトの標準ポートナンバーは ``domain'' サービスの .Xr getservbyname 3 の返す値になります。 .It Fl C Ar class 使用中のクラスを定義します。 デフォルトは 'IN' です。 .It Fl S SOA レコードと NS レコードの転送のみを許可し、 ゾーンに対して A レコードを結合します。 SOA レコードは .Xr named 8 によって読み込まれませんが、 NS レコードをいつ検証するのかを決定するのに使用されます。 詳しくは .Xr named 8 の .Dq Li stubs を参照してください。 .It Fl q named-xfer が静かになるようにします。 .It Fl x Ar src_address この問い合わせに使用する、始点アドレスを指定します。 .It Fl T Ar tsig_file named-xfer に対し、TSIG 情報を送るファイルを指定します。 次の書式の複数エントリです: .Pp .Bl -hang -width "IP address" -compact .It IP address このアドレスに接続するとき、TSIG 鍵を使用します。 .It key name .It algorithm 157 (HMAC-MD5) が唯一のサポートされたアルゴリズムです。 .It key data base64 .El .Pp named-xfer は、このファイルが一時的なものであることを期待し、 使用後にこれを明示的に削除します。 .El .Pp 付加的な引数としてネームサーバのアドレスを、いわゆる .Dq dotted-quad 構文で .Em のみ 、とります。ネームサーバのアドレスの省略は許されません。 少なくとも一つのアドレスを指定しなくてはなりません。 ネームサーバのアドレスが複数指定されると、最初のサーバが転送を失敗すると、 順番にサーバを切り替えて転送を試みます。 ネームサーバアドレスの後の .Sy axfr または .Sy ixfr は、実行するゾーン転送タイプを指定します。 全ゾーン転送には .Sy axfr を使用し、インクリメンタルゾーン転送には .Sy ixfr を使用してください。 .Sh 関連項目 .Xr hostname 7, .Xr named 8 , .Xr resolver 3 , .Xr resolver 5 , RFC 882, RFC 883, RFC 973, RFC 974, RFC 1033, RFC 1034, RFC 1035, RFC 1123, RFC 1995 .Dq Name Server Operations Guide for Sy BIND . diff --git a/ja_JP.eucJP/man/man9/lock.9 b/ja_JP.eucJP/man/man9/lock.9 index 69a501f3ac..8efa1643f8 100644 --- a/ja_JP.eucJP/man/man9/lock.9 +++ b/ja_JP.eucJP/man/man9/lock.9 @@ -1,280 +1,280 @@ .\" .\" Copyright (C) 2002 Chad David . All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice(s), this list of conditions and the following disclaimer as .\" the first lines of this file unmodified other than the possible .\" addition of one or more copyright notices. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice(s), this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY .\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE .\" DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY .\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES .\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR .\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER .\" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH .\" DAMAGE. .\" .\" %FreeBSD: src/share/man/man9/lock.9,v 1.11 2003/09/08 19:57:21 ru Exp % .\" .\" $FreeBSD$ .Dd July 9, 2001 .Dt LOCK 9 .Os .Sh 名称 .Nm lockinit , .Nm lockdestroy , .Nm lockcount , .Nm lockmgr , .Nm lockstatus , .Nm lockmgr_printinfo .Nd lockmgr ファミリの関数 .Sh 書式 .In sys/types.h .In sys/lockmgr.h .Ft void .Fn lockinit "struct lock *lkp" "int prio" "const char *wmesg" "int timo" "int flags" .Ft void .Fn lockdestroy "struct lock *lkp" .Ft int .Fn lockcount "struct lock *lkp" .Ft int .Fn lockmgr "struct lock *lkp" "u_int flags" "struct mtx *interlkp" "struct thread *td" .Ft int .Fn lockstatus "struct lock *lkp" "struct thread *td" .Ft void .Fn lockmgr_printinfo "struct lock *lkp" .Sh 解説 .Fn lockinit 関数はロックを初期化するために使用されます。 これはロックに関する実行されることが可能なあらゆる操作の前に、 呼び出されなければなりません。 引数は以下の通りです。 .Bl -tag -width ".Fa wmesg" .It Fa lkp 初期化されるべきロックへのポインタです。 .It Fa prio .Xr msleep 9 に渡される優先度です。 .It Fa wmesg ロックのメッセージです。 これはデバッグ出力と .Xr msleep 9 の両方のために使用されます。 .It Fa timo .Xr msleep 9 に渡されるタイムアウト値です。 .It Fa flags ロックを初期化するために使用されるべきフラグです。 .Bl -tag -width ".Dv LG_CANRECURSE" .It Dv LK_NOWAIT ロックを獲得するとき、スリープしません。 .It Dv LK_SLEEPFAIL スリープした後に失敗します。 .It Dv LK_CANRECURSE 再帰的な排他ロックを許可します。 .It Dv LK_REENABLE ロックをドレインした後、そのロックを再度有効化します。 .It Dv LK_NOPAUSE ロックを獲得するとき、スピンロックを使用しません。 .It Dv LK_TIMELOCK スリープしている間 .Fa timo を使用します。そうでなければ 0 が使用されます。 .El .El .Pp .Fn lockdestroy 関数はロックを破壊するために使用され、カーネル内のいくつかの場所で 呼び出されますが、現在は何もしません。 .Pp .Fn lockcount 関数はロック .Fa lkp に対する排他ロックと共有ロックのカウント数を返します。 .Pp .Fn lockmgr 関数は共有ロックと排他ロックおよび再帰のサポートを含む、 カーネル内部の一般的なロック機能を取り扱います。 .Fn lockmgr はロックのアップグレードとダウングレードも可能です。 .Pp 引数は以下の通りです。 .Bl -tag -width ".Fa interlkp" .It Fa lkp 操作するべきロックへのポインタです。 .It Fa flags 行なわれるべき操作を示しているフラグです。 .Bl -tag -width ".Dv LK_EXCLUPGRADE" .It Dv LK_SHARED 共有ロックを獲得します。 現在排他ロックが保持されている場合には、ダウングレードされます。 .It Dv LK_EXCLUSIVE 排他ロックを獲得します。 既に排他ロックが保持されていて、 .Dv LK_CANRECURSE が設定されていない場合には、システムは .Xr panic 9 します。 .It Dv LK_DOWNGRADE 排他ロックから共有ロックにダウングレードします。 共有ロックのダウングレードは許可されていません。 排他ロックが既に再帰している場合には、全ての参照がダウングレードされます。 .It Dv LK_EXCLUPGRADE 共有ロックから排他ロックにアップグレードします。 他の誰かが先にアップグレードを待っている最中の場合には、 .Er EBUSY で失敗します。 この呼び出しが失敗した場合には、その共有ロックは失われます。 排他ロックのアップグレードの試みは .Xr panic 9 を引き起こします。 .It Dv LK_UPGRADE 共有ロックから排他ロックにアップグレードします。 この呼び出しが失敗した場合には、その共有ロックは失われます。 排他ロックのアップグレードの試みは .Xr panic 9 を引き起こします。 .It Dv LK_RELEASE ロックを解放します。 保持していないロックの解放は、 .Xr panic 9 を引き起こすことがあります。 .It Dv LK_DRAIN ロック上の全ての行動の終了を待ち、それから役割を終えた印を付けます。 今にも解放されようとしているメモリの一部分のロックを解放する前に使用されます。 .In ( sys/lockmgr.h に解説されています。) .It Dv LK_SLEEPFAIL 操作がスリープした場合には、失敗します。 .It Dv LK_NOWAIT この呼び出しがスリープすることを認めません。 これはロックをテストするために使用することが可能です。 .It Dv LK_CANRECURSE 排他ロック上の再帰を認めます。 それぞれのロックに対し、解放が存在しなければなりません。 .It Dv LK_INTERLOCK (既にロックされているべき) 相互ロックをロック解除します。 .El .It Fa interlkp ロックへのグループアクセスを制御するための相互ロック mutex です。 .Dv LK_INTERLOCK が指定された場合には、 .Fn lockmgr は .Fa interlkp は現在所有されていて再帰していないと仮定し、ロック解除されて返します。 .Xr mtx_assert 9 を参照してください。 .It Fa td この呼び出しに責任があるレッドです。 .Dv NULL は .Dv LK_KERNPROC になります。 .El .Pp .Fn lockstatus 関数は渡された .Vt thread に関するロックの状態を返します。 .Fa td が .Dv NULL で排他ロックが保持されている場合には、 .Dv LK_EXCLUSIVE が返されます。 .Pp .Fn lockmgr_printinfo 関数はロックについてのデバッグ情報を出力します。 これは主に .Xr VOP_PRINT 9 関数によって使用されます。 .Sh 戻り値 .Fn lockcount 関数は 0 以上の整数を返します。 .Pp .Fn lockmgr 関数は成功時には 0 を、失敗時には 0 ではない値を返します。 .Pp .Fn lockstatus 関数は以下の値を返します。 .Bl -tag -width ".Dv LK_EXCLUSIVE" .It Dv LK_EXCLUSIVE スレッド .Fa td によって排他ロックが保持されています。 .It Dv LK_EXCLOTHER スレッド .Fa td -ではない他の誰かよって排他ロックが保持されています。 +ではない他の誰かによって排他ロックが保持されています。 .It Dv LK_SHARED 共有ロックが保持されています。 .It Li 0 だれもロックを保持していません。 .El .Sh エラー .Fn lockmgr は次の場合に失敗します。 .Bl -tag -width Er .It Bq Er EBUSY .Dv LK_FORCEUPGRADE が要求されて、ほかのスレッドが既にロックのアップグレードを要求しています。 .It Bq Er EBUSY .Dv LK_NOWAIT が設定されて、スリープが要求されていました。 .It Bq Er ENOLCK .Dv LK_SLEEPFAIL が設定されて、 .Fn lockmgr は既にスリープしました。 .It Bq Er EINTR ロックの優先度に .Dv PCATCH が設定されて、スリープしている間にシグナルが配送されました。 下記の .Er ERESTART エラーに注意してください。 .It Bq Er ERESTART ロックの優先度に .Dv PCATCH が設定されて、スリープしている間にシグナルが配送され、システムコールが 再スタートされました。 .It Bq Er EWOULDBLOCK 0 でないタイムアウトが与えられ、そのタイムアウトが満了しました。 .El .Sh ロック .Fn lockmgr への .Fa flags 引数に .Dv LK_INTERLOCK が渡された場合には、 .Fa interlkp は .Fn lockmgr を呼び出すために以前に保持されていなければならず、ロック解除されて返されます。 .Pp 失敗するアップグレードの試みは、現在保持しているロックを失わせる 結果になります。 また、排他ロックのアップグレードは無効で、試行の結果として .Xr panic 9 を引き起こします。 .Sh 関連項目 .Xr msleep 9 , .Xr mtx_assert 9 , .Xr panic 9 , .Xr VOP_PRINT 9 .Sh 作者 このマニュアルページは .An Chad David Aq davidc@acns.ab.ca が書きました。 diff --git a/ja_JP.eucJP/man/man9/malloc.9 b/ja_JP.eucJP/man/man9/malloc.9 index 1c99ff1527..c6846c9d96 100644 --- a/ja_JP.eucJP/man/man9/malloc.9 +++ b/ja_JP.eucJP/man/man9/malloc.9 @@ -1,303 +1,303 @@ .\" Copyright (c) 1996 The NetBSD Foundation, Inc. .\" All rights reserved. .\" .\" This code is derived from software contributed to The NetBSD Foundation .\" by Paul Kranenburg. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the NetBSD .\" Foundation, Inc. and its contributors. .\" 4. Neither the name of The NetBSD Foundation nor the names of its .\" contributors may be used to endorse or promote products derived .\" from this software without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR .\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE .\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" .\" $NetBSD: malloc.9,v 1.3 1996/11/11 00:05:11 lukem Exp $ .\" %FreeBSD: src/share/man/man9/malloc.9,v 1.36 2003/09/08 19:57:21 ru Exp % .\" $FreeBSD$ .\" .Dd June 12, 2003 .Dt MALLOC 9 .Os .Sh 名称 .Nm malloc , .Nm MALLOC , .Nm free , .Nm FREE , .Nm realloc , .Nm reallocf , .Nm MALLOC_DEFINE , .Nm MALLOC_DECLARE .Nd カーネルメモリマネージメントルーチン .Sh 書式 .In sys/types.h .In sys/malloc.h .Ft void * .Fn malloc "unsigned long size" "struct malloc_type *type" "int flags" .Fn MALLOC space cast "unsigned long size" "struct malloc_type *type" "int flags" .Ft void .Fn free "void *addr" "struct malloc_type *type" .Fn FREE "void *addr" "struct malloc_type *type" .Ft void * .Fn realloc "void *addr" "unsigned long size" "struct malloc_type *type" "int flags" .Ft void * .Fn reallocf "void *addr" "unsigned long size" "struct malloc_type *type" "int flags" .Fn MALLOC_DECLARE type .In sys/param.h .In sys/malloc.h .In sys/kernel.h .Fn MALLOC_DEFINE type shortdesc longdesc .Sh 解説 .Fn malloc 関数はカーネルアドレス空間の初期化されていないメモリを .Fa size で指定された大きさの 1 つのオブジェクトとして割り当てます。 .Pp .Fn free 関数は .Fn malloc で先に割り当てられていた .Fa addr のアドレスのメモリを再使用するために解放します。 メモリは 0 にクリアされません。 .Fa addr が .Dv NULL の場合、 .Fn free は何もしません。 .Pp .Fn realloc 関数は、以前に割り当てられて .Fa addr で参照されるメモリの大きさを .Fa size バイトに変更します。 メモリの内容は、新サイズと旧サイズの小さい方までは、無変更となります。 戻り値は .Fa addr と違うかもしれないことに注意してください。 要求されたメモリが割り当て不能の場合、 .Dv NULL が返され、 .Fa addr で参照されるメモリは正当で無変更のままとなります。 .Fa addr が .Dv NULL の場合、 .Fn realloc 関数は指定された大きさの .Fn malloc と同等に振舞います。 .Pp .Fn reallocf 関数は .Fn realloc とまったく同じですが、 要求されたメモリを割り当て不能の場合に 渡されたポインタのメモリを解放する点が違います。 .Pp マクロ版の .Fn MALLOC は機能的には .Bd -literal -offset indent (space) = (cast)malloc((u_long)(size), type, flags) .Ed .Pp と同等で、 マクロ版 .Fn FREE は .Bd -literal -offset indent free((addr), type) .Ed .Pp と同等です。 標準Cライブラリの同義関数 .Pq Xr malloc 3 とは異なり、カーネルバージョンは更に 2 つの引数をとります。 引数 .Fa flags は .Fn malloc の操作上の特性を以下のようにみなします。 .Bl -tag -width indent .It Dv M_ZERO 割り当てられたメモリが全て 0 で満たされるようにします。 .It Dv M_NOWAIT リソースの不足のため直ちに要求を満たすことができない場合は、 .Fn malloc , .Fn realloc , および .Fn reallocf が .Dv NULL を返すようにします。 割り込みコンテキストでの動作時には .Dv M_NOWAIT が要求されることに注意してください。 .It Dv M_WAITOK はリソースを待つことが OK であることを示します。 この要求がすぐに満たされることが出来ない場合には、現在のプロセスは、 -他のプロセスのよってリソースが開放されることを待つために、 +他のプロセスによってリソースが開放されることを待つために、 スリープ状態に置かれます。 .Dv M_WAITOK が指定されると .Fn malloc , .Fn realloc , .Fn reallocf 関数は .Dv NULL を返すことが出来ません。 .It Dv M_USE_RESERVE 要求されたメモリを獲得するために、 システムがリザーブ領域を使ってよいことを示します。 このオプションは以前は .Dv M_KERNEL と呼ばれていましたが、 より明示的に改名されました。 このオプションは軽視されていて、カーネルから徐々に削除されています。 そのため、新たなプログラミングでは使用されない様にするべきです。 .El .Pp 厳密に .Dv M_WAITOK または .Dv M_NOWAIT のどちらかが指定されなければなりません。 .Pp 引数 .Fa type はメモリの利用方法の統計をとるためと、 簡単なサニティチェックのために使われています。 これは複数の割り当てを識別するために使用することが可能です。 この統計は .Sq vmstat -m で調べることが出来ます。 .Pp .Fa type は .Fn MALLOC_DECLARE と .Fn MALLOC_DEFINE マクロを通じて .Vt "struct malloc_type" typedef を使用して定義されます。 .Bd -literal -offset indent /* sys/something/foo_extern.h */ MALLOC_DECLARE(M_FOOBUF); /* sys/something/foo_main.c */ MALLOC_DEFINE(M_FOOBUF, "foobuffers", "Buffers to foo data into the ether"); /* sys/something/foo_subr.c */ \&... MALLOC(buf, struct foo_buf *, sizeof *buf, M_FOOBUF, M_NOWAIT); .Ed .Pp .Fn MALLOC_DEFINE を使用するためには、 .In sys/param.h .In ( sys/types.h の代わりに) および .In sys/kernel.h をインクルードしなければなりません。 .Sh 戻り値 .Fn malloc , .Fn realloc , .Fn reallocf 関数はすべてのタイプのオブジェクトの格納に適切なように整列された カーネル仮想アドレスを返すか、 または要求が満足できず (すなわち .Dv M_NOWAIT がセットされていることを意味します) に .Dv NULL を返します。 .Sh 実装に関する注 1 ページまでの要求に対し、 メモリアロケータは、2 の累乗の大きさの量を割り当てます。 より大きな要求に対しては、1 個以上のページが割り当てられます。 この動作に依存してはなりませんが、 この情報がメモリ使用効率の最適化に有用かもしれません。 .Pp プログラマは malloc フラグの .Dv M_NOWAIT および .Dv M_WAITOK と、 .Xr mbuf 9 フラグの .Dv M_DONTWAIT および .Dv M_TRYWAIT を混乱しないように注意するべきです。 .Sh コンテキスト .Fn malloc , .Fn realloc および .Fn reallocf は高速割り込みハンドラから呼び出されることは出来ません。 スレッド化された割り込みから呼び出される時には、 .Fa flag は .Dv M_NOWAIT を含んでいなければなりません。 .Pp .Va Giant ではない mutex が保持されている間は、 .Fn malloc , .Fn realloc および .Fn reallocf は .Dv M_WAITOK 付きで呼び出したときにはスリープするかもしれません。 .Fn free は決してスリープしません。 .Pp .Xr vnode 9 インタロックを保持している時の .Fn malloc .Dv ( M_NOWAIT 付であっても) または .Fn free への全ての呼出しは、VM オブジェクトと vnode の相互獲得のために、 LOR (ロック順序の逆転) を引き起こします。 .Sh 関連項目 .Xr vmstat 8 , .Xr vnode 9 .Sh 診断 .Dv INVARIANTS コンフィギュレーションオプションを付けてコンパイルされたカーネルは、 割り当てられた領域以外への書き込みや .Fn malloc 関数と .Fn free 関数の不均衡な呼び出しなどにより生じたメモリ不正の検出を試みます。 一貫性チェックの失敗はパニックまたはシステムコンソールメッセージを出力します。