Next: , Previous: , Up: Gforth Environment   [Contents][Index]


2.7 Gforth in pipes

Gforth は、他の場所で作成されたパイプラインを使用できます(以下で説明します)。 独自にパイプラインを作成することもできます(see Pipes)。

Gforth にパイプライン入力する場合、 プログラムは stdin から read-file または read-line を使用して読み取る必要があります(see General files)。 Key は入力の終わりを認識しません。 accept のようなワードは入力をエコーするため、 通常はパイプラインからの読み取りには役に立ちません。 あなたは、 (Forthのテキスト・インタプリタはパイプライン入力を通訳(interpret)しようとしてしまうため、)Forth内のコマンド・ラインを使用する機会はなく、 OSのコマンド・ライン・オプションを使用して Forth プログラムを呼び出す必要があります。

あなたは typeemitcr などでパイプラインへ出力できます。

もう一方の端で既に閉じられているパイプラインに書き込むと、 Gforth は SIGPIPE シグナル(「パイプが壊れた」シグナル)を受け取ります。 Gforth はこれを例外 broken-pipe-error に変換します。 あなたのアプリケーションがその例外をキャッチしない場合、 システムはその例外をキャッチして、 通常は黙って終了(exit)します(Forth コマンド・ラインで作業している場合を除き、 エラー・メッセージを出力して終了します)。 これは通常、 望ましい動作です。

この振る舞いが気に入らない場合は、 自分で例外をキャッチし、 対応する必要があります。

ここで、 パイプライン内で使用できる Gforth の呼び出しの例を以下に示します:

gforth -e ": foo begin pad dup 10 stdin read-file throw dup while \
 type repeat ; foo bye"

この例では、 入力をそのまま出力にコピーするだけです。 この例を含む非常に単純なパイプラインは以下のようになります:

cat startup.fs |
gforth -e ": foo begin pad dup 80 stdin read-file throw dup while \
 type repeat ; foo bye"|
head

Gforth の stderr 出力に関連するパイプラインは機能しません。