我有一个 C shell,它通常使用Tcl_Eval
. 通常我只需执行用户输入的内容并获得一些状态就可以了。但是,现在我需要从用户键入的命令接收实际的 stdio 输出。有没有办法使用Tcl C 程序来获得它?
作为旁注:我需要找出 Tcl 解释器中可用的当前过程列表,包括内置的和用户来源的。基本上,来自info procs *
.
我想你可以这样:
pipe(2)
。然后在你的插播中:
stdout
通过调用它来关闭Tcl_Close()
。stdout
调用将管道的写端文件描述符转换为 Tcl 的通道。Tcl_MakeChannel()
stdout
或者只需将 替换为stdout
对 的调用即可Tcl_SetStdChannel()
。
至于你的旁注——我认为你可以调用Tcl_Eval()
你的解释器并使用来自 Tcl API 的列表处理函数来处理返回的列表。
更新(来自我的一条评论):经过深思熟虑后,我认为可能只创建一个自定义 Tcl 通道,该实现将保存写入它的数据,然后将此类通道的实例注册为标准输出。见Tcl_CreateChannel()
和Tcl_RegisterChannel()
。