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

时间:2019-01-08 09:27:08

标签: tcl

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

在读到Tcl exec时,没有提到非标准管道。看起来很明确。

用例是一个启动程序,它启动许多通过多个管道(可能是循环方式)通信的可执行文件。我在想类似的东西:

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

......其中'a'是一个可执行文件,带有文件描述符参数来控制a应该在哪里写东西,反之亦然,而可执行文件'b'则相反。当可执行文件通过多个管道进行通信时,无法使用标准管道。

我知道如何使用命名管道来执行此操作,但宁愿将管道寿命与该过程的寿命联系起来。

1 个答案:

答案 0 :(得分:1)

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

或者在下级shell脚本中进行欺骗。