2

我有一个 C shell,它通常使用Tcl_Eval. 通常我只需执行用户输入的内容并获得一些状态就可以了。但是,现在我需要从用户键入的命令接收实际的 stdio 输出。有没有办法使用Tcl C 程序来获得它?

作为旁注:我需要找出 Tcl 解释器中可用的当前过程列表,包括内置的和用户来源的。基本上,来自info procs *.

4

1 回答 1

1

我想你可以这样:

  1. 通过调用创建管道pipe(2)
  2. 然后在你的插播中:

    1. stdout通过调用它来关闭Tcl_Close()
    2. 通过在关闭后立即stdout调用将管道的写端文件描述符转换为 Tcl 的通道。Tcl_MakeChannel()stdout

    或者只需将 替换为stdout对 的调用即可Tcl_SetStdChannel()

  3. 处理来自管道的数据。

至于你的旁注——我认为你可以调用Tcl_Eval()你的解释器并使用来自 Tcl API 的列表处理函数来处理返回的列表。

更新(来自我的一条评论):经过深思熟虑后,我认为可能只创建一个自定义 Tcl 通道,该实现将保存写入它的数据,然后将此类通道的实例注册为标准输出。见Tcl_CreateChannel()Tcl_RegisterChannel()

于 2013-01-14T19:43:00.787 回答