Как открыть канал, который не является именем файла в tcl? Я прочитал документацию, но я не программист, так что я не должен понять, открытый и чан команды, потому что, когда я пытаюсь открыть новый пользовательский каналTcl открытый канал
open customchannel1 RDWR
я получаю ошибки, такие как
не смог выполнить «customchannel1»: нет такого файла или каталога
И я прекрасно понимаю, что я не делаю это правильно:
chan create read customchannel1
недействительны имя команды «customchannel1» ... и ... недопустимое имя команды «инициализировать»
Все, что я хочу, это два 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-фальсификации портов, которые будут использоваться как uniq-идентификаторы, но каждый пример, который я могу найти открывает файлы и записывает файлы или стандарты, которые вам не нужно создавать в первую очередь.
Спасибо, что помогли мне понять эти концепции и как их реализовать лучше!
Я придерживался гнезда. Вы можете исследовать с помощью FIFO или 'tcl :: chan :: *' modules [in tcllib] (http://core.tcl.tk/tcllib/doc/trunk/embedded/www/toc.html) –