【发布时间】:2021-09-07 04:34:24
【问题描述】:
在浏览下面链接中的答案时,我了解到“open”命令打开了一个 IO 通道进行读/写,类似于 socket 命令的作用。
链接:How can I redirect stdout into a file in tcl
问题:看起来一旦您使用close stdout 关闭标准输出,默认通道就会移动到使用open $file w 创建的内容。为什么这在套接字 IO 编程中不起作用。例如:
set sock [socket -server $port]
close stdout
puts "hello there"
错误:找不到名为“stdout”的频道
期待puts命令的输出直接进入频道
【问题讨论】:
-
您必须先关闭标准输出,然后下一个打开的描述符将替换它。有关逻辑,请参见 stackoverflow.com/a/68869664/9952196,只需将描述符 0 替换为 1。
-
尝试颠倒命令的顺序。首先
close stdout然后set sock [socket -server $port]我得到这个错误“通道“stdout”没有打开写入”。它可能期望标准输出可用作可写通道 -
你必须使用一个连接的套接字,而不是仅仅监听连接。
-
您缺少
socket -server的参数,顺便说一句。 -
是的,套接字已连接到客户端。客户端执行
socket $host $port并连接到服务器,我可以正确地在服务器端放置。你是这个意思吗?对,完整的命令是set sock [socket -server Accept $port]。