2

私は通常、を使用してTclルーチンを呼び出すCシェルを持っていますTcl_Eval。通常、ユーザーが入力した内容を実行して、結果としてステータスを取得するだけで問題ありませんでした。ただし、ユーザーが入力したコマンドから実際のstdio出力を受け取る必要があります。Tcl Cの手順を使用してそれを取得する方法はありますか?

補足として:組み込みとユーザーソースの両方で、Tclインタープリターで使用可能な現在のプロシージャのリストを把握する必要があります。基本的に、からの出力info procs *

4

1 に答える 1

1

私はあなたがこのように行くことができると思います:

  1. を呼び出してパイプを作成しますpipe(2)
  2. それからあなたのinterpで:

    1. stdoutそれを呼び出して閉じますTcl_Close()
    2. を閉じた直後にstdout呼び出すことにより、パイプの書き込み終了ファイル記述子をTclのチャネルに変換します。Tcl_MakeChannel()stdout

    stdoutまたは、をへの呼び出しに置き換えるだけで使用できますTcl_SetStdChannel()

  3. パイプからのデータを処理します。

Tcl_Eval()補足事項—インタプリタを呼び出して、TclAPIのリスト処理関数を使用して返されたリストを処理できると思います。

更新(私のコメントの1つから):もう少し考えた後、カスタムTclチャネルを作成するだけで、実装によって書き込まれたデータが保存され、そのようなチャネルのインスタンスがstdoutとして登録される可能性があると思います。Tcl_CreateChannel()およびを参照してくださいTcl_RegisterChannel()

于 2013-01-14T19:43:00.787 に答える