Tcl / Tk - Memchan - fifo - 如何在一个静态链接Memchan的tcl / tk应用程序中将fifo重命名为stdout?

时间:2011-05-11 13:26:48

标签: redirect tcl stdout

我在comp.lang.tcl上发布了这个问题。

我正在开发一个Tcl/Tk应用程序(称之为rs),我想将stdoutstderr重定向到我的Tcl/Tk应用程序中的文本框。我正在使用Memchan来实现此目的(我将Memchan静态链接到我的应用程序中)。但我无法将我创建的fifo频道重命名为stderr。 (同样的事情也适用于stdout

例如,在以下代码段中,我正在关闭stderr,然后将fifo打开为stderr,但是fifo频道仍然被命名为fifo0而不是stderr }。

 $ rs
 rs> package require Memchan
 2.3
 rs> chan names
 stdin stdout stderr
 rs> close stderr
 rs> chan names
 stdin stdout
 rs> set stderr [fifo]
 fifo0
 rs> chan names
 fifo0 stdin stdout

当我输入stderr命令的最后一个时,我期望fifo0而不是chan names

但是,当我使用tclsh8.5时,上述序列会产生预期效果,即fifo重命名为stderr

 $ tclsh8.5
 % package req Memchan
 2.3
 % chan names
 stdin stdout stderr
 % close stderr
 % chan names
 stdin stdout
 % set stderr [fifo]
 fifo0
 % chan names
 stderr stdin stdout

注意:没有fifo0,但我们得到了所需的stderr

有人可以在我的tclsh8.5申请Tcl/Tk中指出如何重现rs中的行为。

1 个答案:

答案 0 :(得分:1)

由于memchan不会产生由文件描述符备份的通道,因此它无法替换标准通道(总是对应于FD 0,1和2)。