DOKK / manpages / debian 11 / manpages-zh / fconfigure.3tcl.zh_CN
fconfigure(3tcl) Tcl Built-In Commands fconfigure(3tcl)


fconfigure - 设置和获得一个通道上的选项

总览 SYNOPSIS

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

描述 DESCRIPTION

fconfigure 命令设置和检索一个通道的选项。ChannelId 标识要设置或查询某个选项的那个通道。如果没有提供 namevalue 参数,命令返回一个列表,它包含着这个通道上可变更的选项名字和值。如果提供了 name 而没有 value 则命令返回给定选项的当前值。如果提供一对或多对 namevalue,命令把每个指名的选项设置成相应的 value ;在这种情况下返回值是一个空串。

所有通道都支持下面描述的选项。额外的,每个通道类型都可以增加只有它自己支持的选项。参见建立各种类型通道的命令的手册条目来得到这个特定类型的通道所支持的选项。例如,参见 socket命令的手册条目来得到增补的选项。

-blocking 选项决定在通道上的 I/O 操作是否可以导致进程无限的阻塞。选项的值必须是一个正确的 boolean 值。通道通常在阻塞模式中;如果把一个通道转换到非阻塞模式中,它将影响 getsreadputsflush、和 close 命令的操作;详见这些命令的文档。要使非阻塞模式正常工作,应用必须使用 Tcl 事件循环(例如,通过调用 Tcl_DoOneEvent 或调用 vwait 命令)。
如果 newValuefull,则 I/O 系统直到它的内部缓冲变满或调用 flush 命令之后才将缓冲输出。如果 newValueline,则 I/O 系统将在输出一个换行符的时候自动的刷新此通道的输出。如果 newValuenone,则 I/O 系统将在每次输出操作之后自动刷新。除了连接到终端类设备的通道被初始设置成 line 之外,-buffering 的缺省被设置成 full。补充一下,stdinstdout 被初始设置成 line,而 stderr 被设置成 none
Newvalue必须是一个整数;使用它的值来设置随后分配给这个通道用来存储输入和输出的缓冲区的大小,以字节为单位。Newvalue 必须在十到一百万之间,即允许十到一百万字节大小的缓冲区。
用这个选项来指定通道的编码,为了在 Tcl 中使用数据,数据可以转换成 Unicode 或从 Unicode 转换过来。例如,要使 Tcl 从用 shiftjis 编码的日文文件中读取字符并正确的处理和显示其中的内容,编码就应该设置成 shiftjis。此后,当从一个通道读取的时候,在这个日文文件中的字节如其所读的将被转换成 Unicode。同样也支持写入 - 即把要写到通道中的 Tcl 字符串自动的转换成输出上的特定编码。

如果一个文件包含纯二进制数据(例如,一个 JPEG 图象),这种通道应当被配置成 binary。Tcl 将对这种文件中的数据不赋予任何解释,而是简单的读或写原始(raw)的字节。使用Tcl binary 命令操纵这种原始字节数据。

给新打开的通道的缺省编码与同操作系统交互时使用的依赖于平台或本地的编码是一样的。

这个选项支持 DOS 文件系统,它使用 Control-z (\x1a)作为文件结束的标记符(marker)。如果 char 不是一个空串,则在输入期间遇到这个字符时指示(signal)文件结束。对于输出,在关闭通道的时候输出文件结束字符。如果 char 是一个空串,则没有特定的文件结束字符标记符。对于读写通道,一个有两个元素的列表分别指定给输入和输出的文件结束标记符。作为一种约定,在给读写通道设置文件结束符的时候,你可以指定一个单一的值,同时提供给读和写。在查询一个读写通道的文件结束符时,将返回一个两个元素的列表。除了在 Windows 下的文件之外的情况下,-eofchar 缺省值是一个空串。在Windows 的情况下,对于读 -eofchar 是 Control-z (\x1a),对于写是空串。
在 Tcl 脚本中总是使用一个单一的换行符(\n)来表示一行的结束。但是在实际的文件和设备中的行结束在不同的平台上可能有不同的表示,甚至在相同的平台的不同的设备上也可能有不同的表示。例如,在 UNIX 下在文件中是换行符,而在网络连接中通常使用回车-换行(carriage-return-linefeed)序列。在输入上 (例如,使用 getsread),Tcl I/O 系统自动的把外部的行结束表示转换成换行符。在输出上(例如,使用 puts),I/O 系统把换行符转换成外部的行结束表示。缺省的转换模式是 auto,即自动的处理所有一般情况,而 -translation
选项在提供显式的对行结束转换的控制。

对于只读和只写通道,与 -translation 相关联的值是一个单一的项目。对于读写通道这个值是一个两个元素的列表;列表的第一个元素是读转换模式,第二个元素是写转换模式。作为一种约定,在给读写通道设置行结束符的时候,你可以指定一个单一的值,同时提供给读和写。在查询一个读写通道的行结束符时,将返回一个两个元素的列表。当前支持下列值:

作为输入转换模式,auto 把所有的换行(lf)、回车(cr)、或一个回车并跟随一个换行(crlf) 作为行结束表示。行结束表示甚至可以从行到行的改变,并且所有的情况都被转换成一个换行符。作为输出转换模式,auto 选择一个特定于平台的表示;对于套接口,Tcl 在所有平台上均选择 crlf,对于所有 Unix 版本(flavor),它选择 lf,对Macintosh 平台它选择 cr,对于各种版本的Windows 它选择 crlf。对于输入和输出二者,-translation的缺省设置是 auto
不进行行结束转换。除了 binary模式额外的把文件结束符设置成空串(禁用文件结束符),并且把编码设置成 binary (禁用编码过滤)之外,它与lf 模式基本一致。详细信息参见 -eofchar-encoding
在底层文件或设备中的行结束被表示为一个单一的回车符。作为输入转换模式,cr模式把回车符转换成换行符。作为输出转换模式,cr模式把换行符转换成回车符。这种模式典型的在 Macintosh 平台上使用。
在底层文件或设备中的行结束被表示一个回车符并跟随一个换行符。作为输入转换模式,crlf模式把回车换行序列转换成换行符。作为输出模式,crlf 模式把换行符转换成回车换行序列。这种模式典型的在 Windows 平台和网络连接上使用。
在底层文件或设备中的行结束被表示为一个单一的换行符。在这种模式下在输入或输出期间没有转换发生。这种模式典型的在UNIX 平台上使用。

参见 SEE ALSO

close(n), flush(n), gets(n), puts(n), read(n), socket(n)

关键字 KEYWORDS

blocking, buffering, carriage return, end of line, flushing, linemode, newline, nonblocking, platform, translation, encoding, filter, byte array, binary

寒蝉退士

2001/08/02

《中国 Linux 论坛 man 手册页翻译计划》:

http://cmpp.linuxforum.net

本页面中文版由中文 man 手册页计划提供。
中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh

8.1 Tcl