2

C プログラム (p1) で、p1 の標準出力から標準入力を読み取る、動的に構築されたコマンド (およびその引数) を起動する方法は?

ご了承ください:

  1. この stdout --> stdin パイピング以外の方法も、Windowsと Linux 間で移植可能であればOK です。

  2. ここでは C++、Java、Perl、Ruby、Python などは使用できません。

また、これには Windows ビルドの MinGW 依存関係がありますか?

REOPENED : 以下の質問は Linux の場合の回答ですが、この質問は移植可能な方法が必要です。 C プログラム内からプログラムを実行する

4

4 に答える 4

4

Microsoft Cランタイムは、_popenの代わりにそれを呼び出しますpopenが、Windows(コンソールアプリケーション用)とLinuxで同じ機能を持っているようです。

于 2008-10-23T15:07:10.173 に答える
2

正直に言うと、あなたが何を達成しようとしているのか、私には 100% 明確ではありません。

しかし、私が理解しているように、 Boost.Processを見ることができます。

次のようなことができます

 bp::child cs = p.start();
 bp::postream& os = cs.get_stdin();

次に、osを任意のストリームとして使用して、子プロセスの標準入力にダンプします。

とにかく、パイプのリダイレクトとチェーンに関するライブラリを使用すると、非常に多くのことが達成できます。

于 2008-10-23T13:52:18.780 に答える
1

glibライブラリはCで記述されており、LinuxとWindowsの両方で十分にテストされた実装があります。 新しいプロセスの生成に関する手動セクションでは、 g_spawn_async_with_pipes呼び出しを使用して、新しいプロセスを開始し、そのstdinおよびstdoutハンドルにフックする方法について説明します。

于 2008-10-23T16:00:54.903 に答える
1

リンクされた anser (拒否したもの) は、POSIX パイプを参照しています。POSIX は C の拡張であり、標準 C にない機能を追加します。POSIX パイプはそのような機能の良い例です。標準 C にはその機能がないため、POSIX に追加されました。

于 2008-10-23T14:53:02.230 に答える