R6RS:翻訳:Standard Libraries:8.2.6 Input and output ports

R6RS:翻訳:Standard Libraries:8.2.6 Input and output ports

入力ポートと出力ポート

本節で述べる操作は入力と出力、バイナリとテキストポートに共通のものである。ポートにはデータの書き込み先や読み込み元の特定の場所を指す位置があることがあり、それらを検したりその場所を設定する操作が提供されていることがある。

[procedure] (port? obj)

引き数がポートであれば #t を返し、さもなくは #f を返す。

[procedure] (port-transcoder port)

(port-transcoder port) procedure

port がテキストポートで対応するコード変換器がある場合それを返す。バイナリポートである場合や対応するコード変換器がない場合には #f を返す。

[procedure] (textual-port? port)

[procedure] (binary-port? port)

textual-port? 手続きは port がテキストポートであれば #t を返し、さもなくは #f を返す。 binary-port? 手続きは port がバイナリポートであれば #t を返し、さもなくは #f を返す。

[procedure] (transcoded-port binary-port transcoder)

指定した transcoder を持つテキストポートを新たに返す。それ以外はテキストポートの状態は大部分 binary-port と同じである。 binary-port が入力ポートの場合、戻り値も入力テキストポートになり、バイナリポートからまだ読み込まれていないバイト列をコード変換する。出力ポートであった場合には、 binary-port の表している書き込み先に書き込まれたバイト列に出力文字列をコード変換する。

ただし副作用として、 binary-port 自体が閉じられ、本章で述べる入出力操作が行えなくなった場合でも、 binary-port の表すバイト列の読み込み元や書き込み先を、新規のテキストポートが使い続けられるよう、コード変換付きのポートは binary-port を特別の方法で閉じる。

[procedure] (port-has-port-position? port)

[procedure] (port-position port)

port-has-port-position? はポートがポート位置操作をサポートしている場合 #t を返し、そうでなければ #f を返す。

バイナリポートでは port-position 手続きは次のバイトが読み書きされる位置を正確な非負の整数値オブジェクトで返す。テキストポートでは port-position は何らかの実装系依存のポートの位置を表す型を返す。この値は set-port-position! がサポートされている場合、その pos 引き数にのみ有用である(以下参照)。

ポートが当該の操作をサポートしていない場合、 port-position は &assertion コンディション型の例外を発生させる。

: テキストボートでは、ポートの位置は整数であることもありそうでないこともある。整数オブジェクトである場合、それがバイトや文字列の位置に対応している必要はない。

[procedure] (port-has-set-port-position!? port)

[procedure] (set-port-position! port pos)

port がバイナリポートである場合、 pos は非負の正確な整数オブジェクトである。テキストポートの場合には、 posport に対する port-position の呼び出しの戻り値である。

port-has-set-port-position!? 手続きは port が set-port-position! をサポートしている場合には #t を返し、そうでなければ #f を返す。

set-port-position! 手続きは port が当該の操作をサポートしていない場合、 &assertion コンディション型の例外を発生させ、 pos が有効な port の位置でなかった場合には &i/o-invalid-position コンディション型の例外を発生させる。それ以外の場合は、 port の現在の位置を pos に設定する。 port が出力ポートであった場合、 set-port-position! を行なうと、まず最初に port をフラッシュする(R6RS:翻訳:Standard Libraries:8.2.10 Output portsの flush-output-port を参照)。

port がバイナリ出力ポートで、現在の位置がデータ書き込み先のデータ終端を越えていた場合、その位置にデータが書き込まれるまでオブジェクトは拡張されない。その位置の間にある内容は規定されていない。 open-file-output-port と open-file-input/output-port で作成されたバイナリポートは常に下層の OS の制限のもとでこの方法で拡張することができる。それ以外の場合は、下層のオブジェクトのデータ終端を越えてポートを設定しようとすると、 &i/o-invalid-position コンデション型の例外が起こることがある。

[procedure] (close-port port)

ポートを閉じ、データの読み書きをできないようにする。 port が出力ポートであった場合、閉じる前にフラッシュされる。このとき、ポートがすでに閉じられていた場合には何の効果もない。閉じられたポートも依然としてポートである。 close-port 手続きは未規定値を返す。

[procedure] (call-with-port port proc)

proc は引き数をひとつ取らなければならない。 call-with-port 手続きは port を引き数として proc を呼び出す。 proc から返ると、 port は自動的に閉じられ proc の返した値が返される。 proc から返らなかった場合には、可能ならば port が入出力処理に再び使われることが決してないことが証明できる場合を除いて、 port は自動的には閉じられない。


Last modified : 2008/03/16 02:04:29 UTC