puts(3tcl) Tcl Built-In Commands puts(3tcl)

puts - 向一个通道写

puts ?-nonewline? ?channelId? string

把用 string 给出的字符写到用 channelId 给出的通道中。 ChannelId 必须是从以前的 opensocket 调用返回的一个通道标识符。它必须为输出而打开。如果未指定 channelId 则取省为 stdoutPuts 通常在 string 后面输出一个换行字符,但可以通过指定 -nonewline 开关来禁止这个特征。

puts 依照给这个通道的 -translation 选项的值把在输出中换行(Newline)字符转换成特定于平台的行结束序列(例如,在 PC 上换行一般被替换成回车换行(carriage-return-linefeed)序列;在 Macintoshe 上换行通常被替换成回车符(carriage-returns))。关于 fconfigure 如何改变输出的讨论请参见 fconfigure 手册条目。

Tcl 在内部缓冲输出,所以用 puts 写的字符可能不会在输出文件或设备上立即出现;Tcl 通常延迟输出,一直等到缓冲区满了或通道被关闭。你可以通过 flush 命令强制输出立即出现。

当输出缓冲被添满的时候,在所有缓冲的数据被操作系统接受以便输出之前,puts 命令将一直阻塞。如果 channelId 在非阻塞模式下,那么即使操作系统不接受这些数据,puts 命令也不阻塞。作为替代,Tcl 继续缓冲这些数据并在后台以底层的文件或设备可以接受的速度写它们。要使非阻塞的输出工作应用必须使用 Tcl 事件循环;否则 Tcl 不能发现文件或设备已经准备好接收更多的输出数据。在非阻塞模式下的一个通道可以缓冲任意数量的数据,这可能消耗大量的内存。要避免浪费内存,非阻塞 I/O 通常应该以事件驱动的方式用于 fileevent 命令(除非在通过一个文件事件得到指示,通知你通道已经准备好接收更多的数据,否则不要调用 puts)。

file(n), fileevent(n)

channel, newline, output, write

寒蝉退士

2001/10/17

http://cmpp.linuxforum.net

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