Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets tcl/tk-我们可以将tcl标准重定向到套接字吗?_Sockets_Redirect_Tcl - Fatal编程技术网

Sockets tcl/tk-我们可以将tcl标准重定向到套接字吗?

Sockets tcl/tk-我们可以将tcl标准重定向到套接字吗?,sockets,redirect,tcl,Sockets,Redirect,Tcl,我试图将我的stdout和stderr输出重定向到一个文本小部件,我试图Memchan这样做,结果它成功了 我们正在研究的下一个选项是使用套接字。我们可以将tclstdout重定向到套接字吗?如果是,您能提供一个示例代码来演示吗?您能在子流程中运行吗?如果您能够: socket -server accept 12345 ;# pick your own port number... proc accept {channel host port} { exec [info nameof

我试图将我的
stdout
stderr
输出重定向到一个文本小部件,我试图
Memchan
这样做,结果它成功了


我们正在研究的下一个选项是使用套接字。我们可以将
tcl
stdout
重定向到套接字吗?如果是,您能提供一个示例代码来演示吗?

您能在子流程中运行吗?如果您能够:

socket -server accept 12345   ;# pick your own port number...
proc accept {channel host port} {
    exec [info nameofexecutable] realScript.tcl \
            <@$channel >@$channel 2>@$channel &
}
vwait forever                 ;# run the event loop to serve sockets...
socket-服务器接受12345;#选择您自己的端口号。。。
proc accept{通道主机端口}{
exec[info nameofexecutable]realScript.tcl\
@$channel 2>@$channel&
}
永远等待运行事件循环以服务套接字。。。
这将启动一个Tcl子进程,为每个传入套接字连接执行
realScript.Tcl
,并安排stdin(
@
)和stderr(
2>@
)重定向到套接字。它还在后台运行子进程(final
&
),这样就不会阻止传入连接。(在运行子流程之前,您可能需要检查
$host
$port
的可接受性。)


更妙的是,在子流程中,Tcl仍然会自动检测到它正在处理套接字;
fconfigure
命令将能够看到套接字配置(当然,即使它无法更改与之通信的端口)。

您所说的“重定向我的stdout”到底是什么意思?你的意思是,当你做一个
放foo
的时候,你想把它放到插座上吗?如果是这样,只需将默认的
put
命令替换为您自己的写入套接字的命令即可。您可以通过将
put
重命名为其他名称,然后创建自己的名为
put
的进程来实现这一点。然后,您的proc将使用重命名的命令来执行实际的I/O,但是您可以插入套接字作为参数