## Tcl8.6.17/Tk8.6.17 Documentation > Tcl Commands > fconfigure

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

  NAME
    fconfigure — 通信路の指定項目の設定又は取得 Set and get options on a channel
  SYNOPSIS
  説明 DESCRIPTION
    -blocking boolean
    -buffering newValue
    -buffersize newSize
    -encoding name
    -eofchar char
    -eofchar {inChar outChar}
    -translation mode
    -translation {inMode outMode}
      auto
      binary
      cr
      crlf
      lf
  標準通信路 STANDARD CHANNELS
  用例 EXAMPLES
  SEE ALSO
  KEYWORDS

### NAME

fconfigure — 通信路の指定項目の設定又は取得 Set and get options on a channel

### SYNOPSIS

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

### 説明 DESCRIPTION

この fconfigure 命令は､通信路の指定項目を設定又は取得する｡ 　　 The fconfigure command sets and retrieves options for channels.

通信路識別子channelId は､設定項目の設定や問合せをする為の通信路を識別する､又､ Tcl 標準通信路(stdin か stdout か stderr)､又は､open や socket 命令の発動から返った値､又は､Tcl拡張によってもたらされた通信路作成命令の結果の値､の様な､開けられた通信路を参照しなければならない｡ ChannelId identifies the channel for which to set or query an option and must refer to an open channel such as a Tcl standard channel (stdin, stdout, or stderr), the return value from an invocation of open or socket, or the result of a channel creation command provided by a Tcl extension.

もし､ name や value 引数が与えられないと､この命令は､通信路の為の設定項目の内､既定値から値を選択する型の項目名とその値を含むリストを返す｡もし､ value なしで､ name だけが与えられると､この命令は与えられた選択子の現在の値を返す｡もし､name と value の対が幾つか与えられると､この命令は､それぞれの名前の指定項目を対応する value に設定する; この場合､戻り値は空文字列になる｡ 　　　 If no name or value arguments are supplied, the command returns a list containing alternating option names and values for the channel. If name is supplied but no value then the command returns the current value of the given option. If one or more pairs of name and value are supplied, the command sets each of the named options to the corresponding value; in this case the return value is an empty string.

次に述べる指定項目は全ての通信路で運用されている｡更に､各通信路の型は､それだけで運用されている指定項目を追加できる｡その特定の通信路に対応している指定項目については､それぞれの通信路の型を生成している命令についての取扱い説明書の見出しを参照されたい｡譬えば､socket に関する追加的項目については socket 命令に関する取扱い説明書の項目を､直列装置に関する追加的項目については open 命令に関する項目を参照されたい｡　　　 The options described below are supported for all channels. In addition, each channel type may add options that only it supports. See the manual entry for the command that creates each type of channels for the options that that specific type of channel supports. For example, see the manual entry for the socket command for additional options for sockets, and the open command for additional options for serial devices.

-blocking boolean
  この -blocking 指定項目は､通信路上の入出力操作が処理を無制限に抑制させることが可能か否かを定める｡この指定項目の値は適切な論理値でなければならない｡通信路は通常は同期様式である; もし通信路が非同期様式に入ると､ gets と read と puts と flush と close 命令に､非同期の操作を許容して効果を及ぼす; これらの命令の詳細については､説明書を参照されたい｡非同期様式で正しく動作するためには､応用譜は Tcl 行事待機(譬えば､ Tcl_DoOneEvent を呼出すとか､ vwait 命令を起動するとか)を使う必要がある｡ 　　　 The -blocking option determines whether I/O operations on the channel can cause the process to block indefinitely. The value of the option must be a proper boolean value. Channels are normally in blocking mode; if a channel is placed into nonblocking mode it will affect the operation of the gets, read, puts, flush, and close commands by allowing them to operate asynchronously; see the documentation for those commands for details. For nonblocking mode to work correctly, the application must be using the Tcl event loop (e.g. by calling Tcl_DoOneEvent or invoking the vwait command).

-buffering newValue
  もし､ newValue が､full なら､入出力系は､内部緩衝域が一杯になるか､ flush 命令が起動されるまで､出力は緩衝域に貯蔵操作される｡もし､ newValue が line なら何時であれ､入出力系は､改行文字が出力される時は､自動的に出力が払いだされる｡もし､ newValue が none なら､入出力系は､全ての出力操作の後に､自動的に払い出される｡ -buffering の省略時設定は､通信路が､初期設定が line であるような､端末類似装置に接続されている場合を除き､full に設定される｡更に､stdin と stdout は､初期に line に､ stderr は none に設定されている｡ 　　　 If newValue is full then the I/O system will buffer output until its internal buffer is full or until the flush command is invoked. If newValue is line, then the I/O system will automatically flush output for the channel whenever a newline character is output. If newValue is none, the I/O system will flush automatically after every output operation. The default is for -buffering to be set to full except for channels that connect to terminal-like devices; for these channels the initial setting is line. Additionally, stdin and stdout are initially set to line, and stderr is set to none.

-buffersize newSize
  Newvalue は整数でなければならない; その値は､バイトを単位として､緩衝域の大きさの設定に使用され､この通信路の入力又は､出力を貯蔵するために､割り当てられる｡Newvalue は一と百万の間でなければならず､容量が一から百万バイトの緩衝貯蔵が許容される｡(訳註 説明文中のNewvalueはnewSizeの誤りと思われる) Newvalue must be an integer; its value is used to set the size of buffers, in bytes, subsequently allocated for this channel to store input or output. Newvalue must be between one and one million, allowing buffers of one to one million bytes in size.

-encoding name
  この指示項目は通信路の符号化の設定に使用され､それによって､データがTclで使用するユニコードに､或はユニコードから変換される｡譬えば､Tclが､ shiftjis の日本語ファイルから文字を読み込み､適切に処理して内容を画面表示する為には､この符号化は shiftjis に設定するのがよい｡その後で､通信路から読込んだ時に､日本語ファイルのバイトはそれが読まれた通りにユニコードに変換される｡書き出しも同様に対応していて､通信路に書込まれたTclの文字列は出力に指定された符号化に自動的に変換される｡ This option is used to specify the encoding of the channel, so that the data can be converted to and from Unicode for use in Tcl. For instance, in order for Tcl to read characters from a Japanese file in shiftjis and properly process and display the contents, the encoding would be set to shiftjis. Thereafter, when reading from the channel, the bytes in the Japanese file would be converted to Unicode as they are read. Writing is also supported - as Tcl strings are written to the channel they will automatically be converted to the specified encoding on output.

  もし､ファイルに純粋二進データ(譬えば､ JPEG 画像)が含まれていると､通信路の符号化は､ binary に構成設定すべきである｡Tclは､ファイル中のデータに解釈をせず､生のバイトを単に読み書きするよう割付る｡Tclの binary 命令は､このバイト主体のデータを取り扱うことができる｡通常は､二進データを移動させたい時だけ -translation 指定項目を binary に設定した方がよい､理由は､之により､それ以外のデータ流れの中のバイトの自動解釈も同様に停止にさせるので｡ 　　　 If a file contains pure binary data (for instance, a JPEG image), the encoding for the channel should be configured to be binary. Tcl will then assign no interpretation to the data in the file and simply read or write raw bytes. The Tcl binary command can be used to manipulate this byte-oriented data. It is usually better to set the -translation option to binary when you want to transfer binary data, as this turns off the other automatic interpretations of the bytes in the stream as well.

  新しく開かれた通信路の符号系の省略時設定は､OSとの相互対話に使用されている同じ装置と言語に依存したシステムの符号系であり､ encoding system の戻り値に従って設定される｡ 　　　 The default encoding for newly opened channels is the same platform- and locale-dependent system encoding used for interfacing with the operating system, as returned by encoding system.

-eofchar char

-eofchar {inChar outChar}
  この指定項目は､ファイル終末として Control-z (\x1A) を使用しているDOSファイル系も運用できる｡ char が空文字でない場合は､入力の時にその文字に遭遇すると､ファイル終末の合図になる｡出力については､通信路が閉じられる時に､ファイル終末文字が出力される｡ char が空文字の場合､ファイル終末の特別な記号はなくなる｡読み-書き通信路では､２要素のリストで入力と出力の終末をそれぞれ指定する｡簡便の為に､読み-書き通信路のファイル終末文字の指定に､値を一つだけ設定することもでき､それが入力と出力の両方に適用される｡読み-書き通信路のファイル終末文字の問合せには常に２要素のリストが返される｡-eofchar の省略時設定は Windows 以外のシステムでは全て空文字である｡Windowsでは､読込みには Control-z (\x1A) ､書き出しには空文字である｡受入れられる -eofchar の値の範囲は \x01 ～ \x7F である; -eofchar をその範囲外の値に設定しようとすると不具合が発生する｡ 　　　 This option supports DOS file systems that use Control-z (\x1A) as an end of file marker. If char is not an empty string, then this character signals end-of-file when it is encountered during input. For output, the end-of-file character is output when the channel is closed. If char is the empty string, then there is no special end of file character marker. For read-write channels, a two-element list specifies the end of file marker for input and output, respectively. As a convenience, when setting the end-of-file character for a read-write channel you can specify a single value that will apply to both reading and writing. When querying the end-of-file character of a read-write channel, a two-element list will always be returned. The default value for -eofchar is the empty string in all cases except for files under Windows. In that case the -eofchar is Control-z (\x1A) for reading and the empty string for writing. The acceptable range for -eofchar values is \x01 - \x7F; attempting to set -eofchar to a value outside of this range will generate an error.

-translation mode

-translation {inMode outMode}
  Tcl の記述譜では､行末は常に行替記号 (\n) の一文字で表現している｡しかしながら､実際のファイルや装置では行末は､OS毎に､装置毎に､様々に異なっている｡譬えば､Unixでは､ファイルには 行替記号 (\n) が使われるが､電網接続には普通は 先頭戻-行送 の組が使用される｡入力では(即ち､ gets と read を使って) Tcl入出力系は自動的に外部での行末表現を行替記号に翻訳している｡出力では､ (即ち､ puts を使って)､入出力系は､行替記号を外部の行末表現に翻訳している｡省略時の翻訳方法は､auto であって､全ての普通の場合を処理する､しかし､ -translation 指定によって行末翻訳を明示的に制御することができる｡ 　　　 In Tcl scripts the end of a line is always represented using a single newline character (\n). However, in actual files and devices the end of a line may be represented differently on different platforms, or even for different devices on the same platform. For example, under UNIX newlines are used in files, whereas carriage-return-linefeed sequences are normally used in network connections. On input (i.e., with gets and read) the Tcl I/O system automatically translates the external end-of-line representation into newline characters. Upon output (i.e., with puts), the I/O system translates newlines to the external end-of-line representation. The default translation mode, auto, handles all the common cases automatically, but the -translation option provides explicit control over the end of line translations.

  -translation に組合せる値は､入力専用と出力専用の通信路については､１項目である｡入出力通信路については､その値は二要素リストである; 入力変換法が第一要素､書き出し変換法が第二要素である｡面倒なら､読み-書き通信路の変換方法の設定に一つだけの値を設定し､読込みと書き出しの両方に適用することも出来る｡読み-書き通信路の終端記号を問合せには､常に二要素のリストが戻ってくる｡現在の処､次の値が運用されている: 　　　　 The value associated with -translation is a single item for read-only and write-only channels. The value is a two-element list for read-write channels; the read translation mode is the first element of the list, and the write translation mode is the second element. As a convenience, when setting the translation mode for a read-write channel you can specify a single value that will apply to both reading and writing. When querying the translation mode of a read-write channel, a two-element list will always be returned. The following values are currently supported:

  auto
    auto は､入力の翻訳様式として､ 行送り (lf), 先頭戻り (cr), 先頭戻りと 改行 (crlf) の何れも､行末の表現として取り扱う｡行-行 変更さえも､行末の表現として扱い､これらは全て改行に翻訳する｡出力の翻訳では､ auto は､OSに依存した表現を選択する; 接続端末 (socket )用には全てのOSのTclで crlf を選び､全てのUnix 系には､ lf を撰び､多くの Windows 系には､ crlf を撰ぶ｡ -translation の省略時設定は､入力､出力共に auto である｡ As the input translation mode, auto treats any of newline (lf), carriage return (cr), or carriage return followed by a newline (crlf) as the end of line representation. The end of line representation can even change from line-to-line, and all cases are translated to a newline. As the output translation mode, auto chooses a platform specific representation; for sockets on all platforms Tcl chooses crlf, for all Unix flavors, it chooses lf, and for the various flavors of Windows it chooses crlf. The default setting for -translation is auto for both input and output.

  binary
    行末の翻訳は実施されない｡これは､ lf 様式にほぼ等しい､ binary 様式もファイル終末記号を空文字に設定する(使わなくする)が､更に､符号変換系を binary (符号変換を行わない)に設定することが異なる｡それ以上の情報については､ -eofchar と -encoding を参照されたい｡ No end-of-line translations are performed. This is nearly identical to lf mode, except that in addition binary mode also sets the end-of-file character to the empty string (which disables it) and sets the encoding to binary (which disables encoding filtering). See the description of -eofchar and -encoding for more information.

    内部的には､即ち､翻訳機能の実際の振舞いに届く時､この値は lf と同一であり､従って､問合せられた時はそのように報告する｡縦え､ binary が翻訳に設定されていようとも｡ 　　 Internally, i.e. when it comes to the actual behaviour of the translator this value is identical to lf and is therefore reported as such when queried. Even if binary was used to set the translation.

  cr
    基礎となるファイルまたは装置の行末は１文字の先頭戻り文字で表現される｡入力翻訳の様式としては､ cr 様式では､先頭戻り を改行に変換する｡出力翻訳としての様式で､cr の様式は､改行を先頭戻り に変換する｡ 　 The end of a line in the underlying file or device is represented by a single carriage return character. As the input translation mode, cr mode converts carriage returns to newline characters. As the output translation mode, cr mode translates newline characters to carriage returns.

  crlf
    基礎となるファイルまたは装置の行末は先頭戻りに続く行送り記号で表現される｡入力翻訳の様式としては､ crlf 様式では､先頭戻り行送りの組を改行に変換する｡出力翻訳としての様式で､crlf の様式では､改行を先頭戻り行送り に変換する｡この様式は 典型的に Windows と電網接続で使われている｡ The end of a line in the underlying file or device is represented by a carriage return character followed by a linefeed character. As the input translation mode, crlf mode converts carriage-return-linefeed sequences to newline characters. As the output translation mode, crlf mode translates newline characters to carriage-return-linefeed sequences. This mode is typically used on Windows platforms and for network connections.

  lf
    基礎となるファイルまたは端末装置の行末は１文字の改行(行送)文字で表現される｡この様式では､入力も､出力も翻訳は行われない｡この様式は 典型的に UNIXで使われている｡ 　　　 The end of a line in the underlying file or device is represented by a single newline (linefeed) character. In this mode no translations occur during either input or output. This mode is typically used on UNIX platforms.

### 標準通信路 STANDARD CHANNELS

Tcl の標準通信路(stdin と stdout と stderr)はこの命令によって､他の､Tcl外部函数群で開かれた全ての通信路と同じ様に構成設定可能である｡上で記述した標準の任意設定の他にも､その現在の型については他にも特殊な任意設定に対応できるであろう｡もし､譬えば､Tcl応用譜がUnixの inet super-server common から出発したなら､その標準通信路はsockets であり､従ってsocket 指示項目を運用する｡ 　　　 The Tcl standard channels (stdin, stdout, and stderr) can be configured through this command like every other channel opened by the Tcl library. Beyond the standard options described above they will also support any special option according to their current type. If, for example, a Tcl application is started by the inet super-server common on Unix system its Tcl standard channels will be sockets and thus support the socket options.

### 用例 EXAMPLES

それが端末であるかどうかに拘らず､常に直ぐに stdout に出力を送信する様にTclに指示する｡ 　　　 Instruct Tcl to always send output to stdout immediately, whether or not it is to a terminal:

    fconfigure stdout -buffering none

他の行事の処理を抑止することなく､socket を開け､そこから行を読む: 　　　 Open a socket and read lines from it without ever blocking the processing of other events:

    set s [socket some.where.com 12345]
    fconfigure $s -blocking 0
    fileevent $s readable "readMe $s"
    proc readMe chan {
        if {[gets $chan line] < 0} {
            if {[eof $chan]} {
                close $chan
                return
            }
            # 今回は完全には１行が読めなかった;Tcl'sの
            # socket上に更なるデータが利用可能になるまで
            # 内部緩衝域に部分的な行が假置きされる
            # Could not read a complete line this time; Tcl's
            # internal buffering will hold the partial line for us
            # until some more data is available over the socket.
        } else {
            puts stdout $line
        }
    }

file から PPM-書式の映像を読み出す｡　　　　 Read a PPM-format image from a file:

    # ファイルを開け､UnixのASCII様式に直す
    # Open the file and put it into Unix ASCII mode
    set f [open teapot.ppm]
    fconfigure $f -encoding ascii -translation lf

    # ファイルの冒頭情報を得る
    # Get the header
    if {[gets $f] ne "P6"} {
        error "not a raw-bits PPM"
    }

    # 非注釈行を得る迄行を読むと
    # ３つの十進数が得られる
    #
    # Read lines until we have got non-comment lines
    # that supply us with three decimal values.
    set words {}
    while {[llength $words] < 3} {
        gets $f line
        if {[string match "#*" $line]} continue
        lappend words {*}[join [scan $line %d%d%d]]
    }

    # 映像の容量と､通信路当りの全深さを与える､
    # この語を変数に代入する｡
    #
    # Those words supply the size of the image and its
    # overall depth per channel. Assign to variables.
    lassign $words xSize ySize depth

    # データ中に引込む為に二進様式に切替る,
    # 通信路当り１バイト　色点当り(赤､緑､青)
    # Now switch to binary mode to pull in the data,
    # one byte per channel (red,green,blue) per pixel.
    fconfigure $f -translation binary
    set numDataBytes [expr {3 * $xSize * $ySize}]
    set data [read $f $numDataBytes]

    close $f

### SEE ALSO

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

### KEYWORDS

blocking, buffering, carriage return, end of line, flushing, linemode, newline, nonblocking, platform, translation, encoding, filter, byte array, binary
Copyright © 1995-1996 Sun Microsystems, Inc.