【发布时间】:2016-03-17 22:13:20
【问题描述】:
如何在 tcl 中打开一个不是文件名的频道?我已经阅读了文档,但我不是程序员,所以我不能理解 open 和 chan 命令,因为当我尝试打开新的自定义频道时
open customchannel1 RDWR
我收到诸如
之类的错误无法执行“customchannel1”:没有这样的文件或目录
而且我完全清楚我没有正确执行此操作:
chan create read customchannel1
无效的命令名称“customchannel1” ...和...无效的命令名称“initialize”
我想要的只是两个 tcl 脚本能够相互交谈。我想我可以使用渠道来做到这一点。
不过,我已经成功创建了我想要的套接字测试版本:
proc accept {chan addr port} {
puts "$addr:$port says [gets $chan]"
puts $chan goodbye
close $chan
}
puts -nonewline "master or slave? "
flush stdout
set name [gets stdin]
if {$name eq "master"} {
puts -nonewline "Whats the port? "
flush stdout
set port [gets stdin]
socket -server accept $port
vwait forever
} else {
puts "slave then."
puts -nonewline "Whats the id? "
flush stdout
set myid [gets stdin]
set chan [socket 127.0.0.1 $myid]
puts $chan hello
flush $chan
puts "127.0.0.1:$myid says [gets $chan]"
close $chan
}
在上面的示例中,我可以运行 3 个程序实例:2 个具有不同端口号的“主设备”,以及一个“从设备”,可以根据它选择的端口/“ID”与任一设备通信。
如果我知道如何使用 open 命令而不是 socket 命令打开通道,我可以在不使用套接字或 jimmy-rigging 端口以用作 uniq id 的情况下实现上述代码,但我能找到的每个示例都会打开文件并写出您不必首先创建的文件或标准输出。
感谢您帮助我理解这些概念以及如何更好地实施它们!
【问题讨论】:
-
我会坚持使用套接字。您可能想使用 FIFO 或
tcl::chan::*模块 in tcllib 进行调查