1

C書き込み関数へのすべての呼び出しを含め、すべてのコンソール出力を自分のGUIコンソールにリダイレクトしたいと思います。

私が試したこと:

  • 新しいストリームクラスを作成していますが、stdio.stdoutはファイルであり、ストリームを割り当てることはできません
  • 新しいファイルクラスを完全に作成しますが、構造体を拡張することはできません

そのためにCバインディングを深く理解する必要がありますか?どんな助けでも大歓迎です。

4

3 に答える 3

3

この問題の典型的な解決策は多くの場所で説明されています。これは、Windowsでそれを行う方法を説明する古い記事です:http://edn.embarcadero.com/article/10387

どのUNIXでも同じように機能します。

要するに:

  1. 2つのパイプを作成します。1つは子プロセスstdin用で、もう1つは子プロセスstdout用です。
  2. プロセスを作成し、これら2つのパイプをstdin/outに接続します
  3. これで、GUIから、子プロセスstdoutに攻撃されたパイプから読み取り、子プロセスstdinに攻撃されたパイプに書き込みます。

簡単な2番目のアプローチは、popen()子プロセスを実行するたびに関数を使用することです。この標準関数は、上記のすべてを実行します。

于 2012-11-17T10:45:10.963 に答える
2

別のパスを選択して、独自のwriteln関数を作成しました。どうやら私が使用しているライブラリはどれも端末出力を直接行わないので、パイプやファイルよりも面倒ではないようです。

于 2012-11-17T12:35:59.383 に答える
1

簡単ですが、本当にハッキーな方法は、Cのfreopen()を使用してstdoutを一時ファイルにリダイレクトし、そのファイルをコンソールに読み込むことです。

オペレーティングシステムレベルでパイプにリダイレクトしてから、コンソールにパイプのもう一方の端でリッスンさせることができる場合があります。それはもっときれいになるでしょうが、もっと多くの苦痛です。

いずれにせよ、Dライブラリはあまり役に立たないと思います。ある種のCライブラリソリューションを使用することをお勧めします。

于 2012-11-16T23:50:49.930 に答える