fconfigure

ReferenceTOPKeywords

コマンド名

fconfigure -チャネルのオプションを設定、または参照します。

構文

fconfigure channelId
fconfigure channelId name
fconfigure channelId name value ?name value... .?

解説

fconfigureコマンドはチャネルのプションを設定、または参照を行います。

ChannelIdはオプションを設定あるいは参照するチャネルの識別子です。この識別子はTclの標準チャネル ( stdinstdoutまたはstderr )や 、openまたは socketの呼び出しからの戻り値、またはTcl拡張によって提供されたチャネル作成コマンドの結果です。

引数namevalueが指定されなければ、このコマンドはチャネルに対するオプション名、及び値を交互に含むリストを返します。 name が提供され、valueがない場合、このコマンドは所定のオプションのカレント値を返します。1個以上のnamevalueがペアで提供される場合、このコマンドは指定された各オプションに、対応しているvalueで設定し、空の文字列を返します。

以下で示されたオプションは全てのチャネルに使用できます。更に、各チャネルタイプにはサポートする独特なオプションを加えることができます。 特定のタイプのチャネルがサポートするオプションに関する情報は各タイプのチャネルを作成するコマンドのマニュアルを参照してください。例えば、 socketに対する追加オプションはsocketコマンドに関するマニュアルを参照してください。

-blocking bool 
-buffering newValue
-buffersize newSize
-encoding name
-eofchar char
-eofchar {inchar outchar}
-translation mode
-translation { inMode outMode }
auto
binary
cr
crlf
lf
-blocking bool
-blockingオプションは、チャネルに対するI/O操作によってプロセスは無期限にブロックすることができるかどうかを示します。オプションboolの値は適切なブール値でなければなりません。チャネルは通 常モードになります。チャネルが非ブロックモードになる場合はgets read puts flushそしてcloseコマ ンドの操作に影響を与えます。 詳細は、これらのコマンドのドキュメントを参照してください。非ブロックモードで正常に動作するためには、アプリケーションがTclイベントループを使わなければなりません( 例えばTcl_DoOneEventをコールするかvwaitを呼び出します ) 。

-buffering newValue
newValuefullであれば、内部のバッファがいっぱいになるかflushコマンドが呼び出されるまで、I/Oシステムは出力をバッファに溜めます。 newValueLineであれば、改行文字がアウトプットされる度に、I/Oシステムはチャネルへの出力を自動的書き出します。newValuenoneの場合、I/Oシステムは全ての出力オペレーションの直後で自動的に書き出します。ターミナル類のデバイスにつながるチャネル以外の-bufferingデフォルト値はfullに設定されます。ターミナル類のチャネルの初期設定はlineです。なお、stdin及びstdoutの初期値はlineにセットされ、stderrnullにセットされます。

-buffersize newSize
Newvalueは整数でなければなりません。Newvalueの値は、チャネルに継続的に割当てられたバイト単位 のバッファのサイズです。このバッファは、インプットとアウトプットに使われます。Newvalueのサイズは10から100万の間でなければなりません。これにより10 〜100万バイトのバッファが設定されます。

-encoding name
このオプションは、チャネルのエンコーディングを設定します。データはnameで指定されたエンコーディングから、Tclで使用するユニコードへ変換されます。例えば、shiftjisである日本語のファイルから順番に文字を読み取り、内容を適切に処理し表示するためには、エンコーディングはshiftjisに設定する必要があります。チャネルからの読み込み操作は、日本語のファイルの各バイトはユニコードに変換して読み込みます。書き込み操作も同じくサポートされます。 Tcl文字列がチャネルに書き込む際、出力として指定されたエンコーディングに自動変換されます。

ファイルが純粋なバイナリデータ ( 例えば、JPEGイメージ ) を含む場合、チャネルのエンコーディングは binaryに設定します。Tclは、ファイルにおけるデータを解析せず、生のバイトを読み書きします。このバイトタイプのデータを処理するためにはTclの binaryコマンドを使います。

新規にオープンされたチャネルのデフォルトエンコーディングは、オペレーティングシステムのインターフェイスと同様のカレントシステムエンコーディングです。このエンコーディングはプラットホーム及びロケールに依存します。

-eofcharchar
-eofchar {inChar outChar}
このオプションは、Control-z ( \x1a ) をファイルエンドマーカとして使うDOSファイルシステムをサポートします。charが空の文字列でなければ、この文字が入力中に現れると、ファイル終了を意味します。出力の場合、チャネルが閉じられる際に、ファイルエンドマーカ文字(end of file)が出力されます。charが空の文字列であれば、特別なファイル終了マークはありません。入力及び出力それぞれのI/Oチャネルのために、2つの要素リストでファイルエンドマークを指定します。便宜上、読み取り‐書き込みチャネルでファイル終了マークをセットする場合、読み取りと書き込みの両方に適用される1つの値を指定することができます。読み取り‐書き込みチャネルのファイル終了マークを照会する場合、常に2つのエレメントリストが返されます。Windowsフォルダにあるファイルを除く全てのファイルの-eofcharデフォルト値は、空の文字列です。Windowsの場合、-eofchar既定値は、読み取りControl-z ( \x1a ) で、書き込むのは空の文字列です。

-translationmode
-translation { inMode outMode }
Tclスクリプトでの行終了は、常に改行文字 ( \n ) で表されます。しかし、世の中の異なるプラットホームのファイル及びデバイスでは、異なる行終了マークを持っています。同じプラットホームでもデバイスによって異なる場合があります。例えば、UNIXではファイルに使うのはnewlinesですが、ネットワーク接続では通 常arriage-return-linefeedシーケンスは使われます。入力 ( すなわち getsそして read ) の際、Tcl I/Oシステムは外部のend-of-line表現を改行文字に自動的に変換します。出力 ( すなわち puts ) の際、I/Oシステムはnewlinesを外部のend-of-line表現に変換します。デフォルト変換モードautoは自動的に全てを一般 のケースとして扱います。-translationオプションは、行終了変換に対する明白な操作を指示します。

-translationに設定する値は、読み取り専用と書込み専用チャネルの場合、1つのアイテムであり、読み取り‐書き込みチャネルの場合は2つの要素リストです。読み取りの変換モードは、リストの最初の要素で指定さて、そして書込み変換モードは第2の要素です。便宜上、読み取り‐書き込みチャネルの変換モードを示すために1つの値 ( 読み取りと書き込み両方に適用される )だけを指定できます。読み取り‐書き込みチャネルの変換モードを照会する場合、常に2つ要素リストが返されます。現在サポートされている値は下記の通 りです。

auto
入力変換モードautoは次の全てを行終了表現として扱います。newline ( lf ) 、キャリッジリターン ( cr ) またはキャリッジリターンにnewlineが後続する ( crlf ) です。行終了表現は、各行で異なっても許され、全ての行終了表現はnewlineに変換されます。出力変換モードautoは、プラットフォームによって特定の表現を使用します。全てのプラットフォーム上のソケットには、Tclはcrlfを使用し、 全てのUnixフレーバーのためにlfを使用します。マッキントッシュプラットフォームの場合には、crを使用し、そして、ウィンドウズの様々なフレーバーのためにcrlfを使用します。入力と出力の両方の-translationの定着したデフォルトはautoです。

binary
行終了変換は行われません。lfモードとほぼ同じですが、lfモードと異なるのは、binaryモードが行終了を空の文字列 (行終了を無効にする ) に設定すると同時にエンコーディングを binary(エンコーディングフィルタリングを無効にする)に設定します。詳細な情報は-eofchar及び-encodingの記述を参照してください。

cr
内部ファイルまたはデバイスにおける行終了表現はキャリッジリターンキャラクタ1つです。入力変換モードとして、crモードはキャリッジリターンを改行文字に変換します。出力変換モードとして、crモードは改行文字をキャリッジリターンに変換します。この方法は、マッキントッシュプラットホームで使われます。

crlf
内部ファイルまたはデバイスにおける行終了表現は、改行キャラクタプラスキャリッジリターンキャラクタで表されます。入力変換モードとして、crlfモードはcarriage-return-linefeedシーケンスを改行文字に変換します。出力変換モードとして、crlfモードは改行文字をcarriage-return-linefeedシーケンスに変換します。この方法はウィンドウズ系プラットホーム及びネットワーク接続に使われます。

lf
内部ファイルまたはデバイスにおける行終了表現は、1つのnewline ( 改行 ) キャラクタです。このモードでは、入力及び出力の間に変換は発生しません。この方法は、UNIXプラットホームに使われます。


標準チャネル

このコマンドは、Tclライブラリが開く他の全てのチャネルのように、Tclの標準チャネル ( stdinstdout及びstderr ) を設定します。上記で示された標準のオプションを以外に、現在チャネルタイプに依存した特別 なオプションをサポートします。例えば、TclアプリケーションがUnixシステム上の一般 的なinetスーパー‐サーバによって起動された場合、そのTclの標準のチャネルはソケットであるため、ソケット専用のオプションをサポートします。

シリアルポート構成オプション

channelIdがシリアルポートの場合、POSIXシリアル・インタフェースを持つウィンドウズ及びUnixシステム上で次の追加設定オプションは利用可能です。

-mode baud, parity,data,stop
-handshaketype
-queue
-timeout msec
-ttycontrol {signal boolean signal boolean ... }
-ttystatus
-xchar { xonChar xoffChar }
-pollinterval msec
-sysbuffer inSize
-sysbuffer { inSize outSize }
-lasterror
-modebaud,parity,data,stop
このオプションは、4つのコンマに分離された値のセットで、ボーレート,パリティ,データのビット数、及びこのシリアルポートのストップビット数を指定します。baudは、接続が速度を増すことを明示するシンプルな整数で、paritynoemsの何れかです。"none'', "odd'', "even'', "mark'',  "space''のパリティを意味します。dataは、データのビット数で、5から8まで整数です。そしてstopがストップビット数で、整数1または2です。

-handshaketype
 (Windows、及びUnix)。このオプションは、自動ハンドシェイク制御の設定に使われます。ご使用のオペレーティングシステムが全てのハンドシェイクタイプをサポートするわけではありません。typeパラメータはケースに依存しません。typenoneであれば、全てのハンドシェイクはオフに設定されます。rtsctsはハードウェアハンドシェイクをアクティブにします。 ハードウェアハンドシェイクシグナルは下記で示されます。ソフトウェアハンドシェイクのxonxoffのためのハンドシェイク文字は、-xcharで再定義することが可能です。ハードウェアハンドシェイク dtrdsrは、ウィンドウズでのみ利用可能です。ハンドシェイク設定にはデフォルトがありません。初期値は、オペレーティングシステム設定によって異なります。-handshakeオプションは、参照することができません。

-queue
(Windows、及びUnix)。-queueオプションは参照のみです。返すものは、現在インプット、アウトプットされた各々の待ち行列のバイト数を表す2つの整数のリストです。

-timeout msec
(ウィンドウズ及びUnix) 。このオプションは、ブロックモード読み込み操作のタイムアウトを設定します。ミリセカンド単位 2バイト数字で、受け入れ操作が許す最大の間隔を指定します。Unixシステムの場合は、100ミリセカンドです。-timeoutオプションは、非ブロックモード読込み操作及び書込み操作に影響しません。このオプションは、参照することができません。

-ttycontrol {signal boolean signal boolean ...}
(Windows、及びUnix)。このオプションは、ハンドシェイク出力は間断なく1行(下記を参照)として行うか、もしくはBREAKをシリアル行の間に送るか、を指定します。signal 名は、ケースに依存しません。{ RTS 1 DTR 0 } はRTSアウトプットをハイにセットし、DTRアウトプットをロウにセットします。{ BREAK 1 }によって、BREAK条件 ( 下記を参照) はイネーブルに設定され、{ BREAK 0 }によって、BREAK条件はディセーブルに設定されます。結果は予測できないため、RTS ( あるいはDTR ) シグナルをアクティブなハードウェアハンドシェイク rtscts ( あるいはdtrdsr ) に設定することは勧められません。-ttycontrolオプションは、参照することができません。

-ttystatus
(Windows、及びUnix)。-ttystatusオプションは、参照のみです。現在のモデム状態及び、ハンドシェイクインプットシグナルを返します (下記参照 )。 結果値はシグナルのリストで、特定な順番での2値です。例えば、{ CTS 1 DSR 0 RING 1 DCD 0 }signal 名は大文字で返されます。

-xchar { xonChar xoffChar }
(Windows、及びUnix)。このオプションは、ソフトウェアハンドシェイク文字を照会または設定するために使われます。通 常オペレーティングシステムデフォルトはASCIIの標準の、XONそしてXOFF文字を表すDC1 ( 0x11 ) 及びDC3 ( 0x13 ) です。

-pollinterval msec
(Windowsのみ) 。このオプションは、fileeventsのpollingの最大間隔時間を設定します。Tclインタープリタの全てのイベントチェックの時間間隔に影響します( 最も小さい値が優先される ) 。シリアルポートをチェック調査する時間間隔のデフォルトは10 msec ですので、これを変更したい場合、このオプションを使用します。

-sysbuffer inSize
-sysbuffer { inSize outSize }
(Windowsのみ)。このオプションは、シリアルチャネルのためのウィンドウズシステムバッファサイズを変更するために使われます。特に高い通 信レートの場合、4096バイトのデフォルト入力バッファサイズでは、オーバーランしてシステム速度を低減させる恐れがあります(変更する必要がありあります。)。1つ目のフォーマットは、インプットバッファサイズを指定し、2番目ではインプットとアウトプットバッファを指定します。

-lasterror
(Windowsのみ)。このオプションは、照会のみです。 readまたはputsはシリアル通 信エラーの場合には、一般的なTclファイルI/Oエラーを返す。fconfigure -lasterrorは詳細のエラーリストを得るために呼び出されます。様々なエラーコードの説明については、下記を参照してください。

シリアルポートシグナル

RS-232は、シリアル通信のための最も一般に使われた標準な電気インタフェースです。負の電圧 ( -3V..-12V )はマーク ( on=1 ) ビットを定義します。正の電圧 ( +3..+12V ) はスペース ( off=0 ) ビット ( RS-232C ) を定義します。下記シグナルは入力・出力のデータ、状態ライン及びハンドシェイクを指定するために使います。ここでは、コンピュータをワークステーションと呼び、外部デバイスをモデムと呼びます。いくつかのシグナル名( DCD,RI ) がモデムから由来したからです。もちろん、他の目的の外部のデバイスはこれらの信号線を使うことも可能です。

TXD ( output )
RXD ( input )
RTS ( output )
CTS ( input )
DTR ( output )
DSR ( input )
DCD ( input )
RI ( input )
BREAK
TXD ( output )
Transmitted Data:出力するシリアルデータ。

RXD ( input )
Received Data:入力するシリアルデータ。

RTS ( output )
Request To Send:このハードウェアハンドシェイクラインは、ワークステーションがデータを受け取る準備が整っていることをモデムに通 知します。ワークステーションは、入力バッファがいっぱいになったことを知らせるために、自動的にこの値をリセットする場合もあります。

CTS ( input )
Clear To Send:RTSへの補足で、モデムがデータを受け取る準備が整っていることを示します。

DTR ( output )
Data Terminal Ready:この信号は、ワークステーションがリンクを確立する準備が整っていることをモデムに知らせます。シリアルポートが開かれると、DTRは常に自動的に使用可能に設定さてます。

DSR ( input )
Data Set Ready:DTRへの補足で、モデムがリンクを確立する準備が整っているとワークステーションに通 知します。

DCD ( input )
Data Carrier Detect:モデムが「キャリア」を検知すると、このラインはアクティブにになります。

RI ( input )
Ring Indicator:モデムが着呼を検知すると、アクティブになります。

BREAK
BREAK条件はハードウェアシグナルラインではなく、論理的にゼロです。これはTXD及びRXDライン上の長時間間隔を示します。通 常は250 〜 500ミリセカンドです。通常次の文字が転送されるまで、送受信するデータシグナルはマーク ( on=1 ) 電圧に保持されます。BREAKは通信回線をリセットしたい時や、通信ハードウェアのオペレーティング方法を切り替えたい時に使われます。

エラーコード (Windowsのみ)

様々なエラーがシリアル読み込み操作や、イベントがバックグラウンドで待機している間に、多く発生します。原因としては、外部のデバイスのスイッチを切ったり、データラインがビジーだったり、またはシステムバッファがいっぱいになったり、モード設定が間違っていたりすること等が上げられます。安定したアプリケーションは常にシリアル読み込み操作をcatchする必要あります。エラーの場合、Tclは一般的なファイルI/Oエラーを返します。fconfigure -lasterrorは問題の発見に役立ちます。返されるエラーコードは次の通りです。

RXOVER :
TXFULL
OVERRUN
RXPARITY
FRAME
BREAK
RXOVER :
ウィンドウズのインプットバッファがいっぱいになりました。データがスクリプト処理より速いので、システムがオーバーロードされています。一時的ネックを回避するためにfconfigure -sysbufferを使用し、スクリプトのスピードアップを図ります。

TXFULL
ウィンドウズのインプットバッファがいっぱいになりました。RXOVERへの補足です。実際には、Tclは出力バッファの状態を常に監視しているのでこのエラーは起こることはありません。

OVERRUN
UART ( ハードウェア ) バッファオーバーランが発生し、データを失いました。転送されてくるデータのスピードはシステムドライバがデータを受け取る速度より速いです。使用しているシリアルポートの高度設定で、FIFO ( 16550 ) バッファを可能にし、かつ、より低い中断処理間隔値 ( 1 ) を設定します。

RXPARITY
UARTによってパリティエラーが検出されました。fconfigure -mode、またはビージーデータライン ( RXD ) による誤ったパリティ設定はこのエラーの原因となります。

FRAME
UARTによってストップ・ビットエラーが検出されました。fconfigure -mode、またはビージーデータライン ( RXD ) による誤ったモード設定は、このエラーの原因となります。

BREAK
UARTによってBREAK条件が検出されました ( 上記参照 ) 。

参照

close, flush, gets, puts, read, socket, Tcl_StandardChannels

キーワード

blocking, buffering, carriage return line, end, flushing, linemodenewline, nonblocking, platformtranslationencoding, filter, byte array,   binary


Copyright © 1995-1996 Sun Microsystems, Inc. Copyright © 1995-1997 Roger E. Critchlow Jr.