如何使用 Tcl 创建和重定向 stdin/stdout/stderr 以外的文件描述符



阅读有关bash exec的信息,可以创建和重定向标准管道以外的管道,例如 exec 3>4 .

阅读有关Tcl执行的信息,没有提到非标准管道。似乎很明确。

用例是一个启动器,启动许多可执行文件通过多个管道进行通信(可能是循环方式)。我在想这样的事情:

lassign [chan pipe] a2b_read a2b_write
exec a 3 3>@$a2b_write
exec b 3 3<@$a2b_read
...

。其中"a"是一个可执行文件,它采用文件描述符参数控制 a 应该在哪里写入内容,反之亦然,对于可执行文件"b"。当可执行文件通过多个管道进行通信时,使用标准管道不起作用。

我知道如何使用命名管道来做到这一点,但更愿意将管道寿命与进程的寿命联系起来。

Tcl 根本没有内置的dup()绑定,并且仅以非常有限的方式使用dup2()(仅适用于三个标准通道)。没有这些,此功能将无法工作。这是你需要TclX的地方,在那里你可以完全控制通道处理和进程启动,并做任何你想做的事情(通过forkdupexecl;请注意,这根本不像exec,更像POSIX系统调用)。

或者在从属外壳脚本中做诡计。

最新更新