当管道有信息时,未调用可读过程

问题描述 投票:0回答:1

在 Linux 上,我使用“mkfifo pip”创建了一个管道文件。在一个终端上,我发出“tail -f pip”,在另一个终端上发出“ls > pip”。我可以看到从第二个终端到第一个终端的信息流。

我创建了一个 TCL 脚本来读取流入 pip 的信息。

fconfigure stdout -buffering none
set fd [open "pip"]
fconfigure $fd -blocking 0 -buffering line
fileevent $fd readable [list Treading $fd]

proc Treading {desc} {
        gets $desc line
        puts stdout "Got line - $line"
}

while {1} {
        puts "waiting..."
        after 2000
}

我运行程序并从另一个终端发出“cat > pip”,在输出中我没有看到任何从 Treading 过程调用的“Got line”打印。

$tclsh sockpip.tcl 
waiting...
waiting...
waiting...
waiting...
waiting...
waiting...

如果我遗漏了什么,有人可以帮我澄清吗?我想要事件驱动的编程工作。

提前致谢。 紫外线。

linux file pipe tcl event-driven
1个回答
0
投票

要触发

readable
事件,需要使用
after
的非阻塞形式,请参见https://www.tcl-lang.org/man/tcl8.6/TclCmd/after.htm# M6并且您需要启动Tcl事件循环。而不是:

while {1} {
        puts "waiting..."
        after 2000
}

尝试:

proc waiting {} {
        puts "waiting..."
        after 2000 waiting
}

waiting
vwait forever
© www.soinside.com 2019 - 2024. All rights reserved.