1

別のアプリケーションを一度だけ起動したい c++ アプリケーション (Linux) を作成しています。(すでに開いている場合は、その使用よりもhandle)。

また、同じアプリケーションに入力を提供したい場合もあります。例えば:

    class myapp():
        start second application here.
        work()
    myapp::work(){
        create input
        provide input to the started/already open second application
    }

そのため、myapp のオブジェクトが作成されるたびに、2 番目のアプリケーションが開始されます (まだ開いていない場合のみ)。そして、毎回入力をアプリケーションに渡しますか? それは可能でしょうか?また、ユーザーが終了しない限り、2 番目のアプリケーションを閉じたくありません。私はすでにこれを行うためにpidとforkを使用しています。しかし、どういうわけか、アプリケーションを複数回起動しており、このアプリケーションに入力することもできません。

これが十分に明確であることを願っています。これについてはすでに多くの Q&A が用意されていることは承知していますが、明確に理解できていませんでした。もう一度同じ質問をしている場合は申し訳ありません。

助けてくれてありがとう

4

1 に答える 1

2

popenは、この仕事に適したツールです。実行するコマンドを渡すと、FILE *プログラムから 2 番目のプログラムへのパイプを表す C ファイル ハンドル ( ) が返されます。このハンドルで書き込むすべてのデータは、2 番目のプログラムの標準入力に送られます。

これは C ファイル ハンドルであるため、fprintfなどの CI/O 関数を使用して書き込む必要があることに注意してください。残念ながら、C ファイル ハンドルを C++ 出力ストリームに変換する標準的な方法はありません。

以下は、GNU libc マニュアルpopenの例を基にした の使用例です。

FILE *pipe = popen("wireshark -i -k", "w"); // "w" means "write mode"
if (!pipe) {
    // execution failed
    return;
}

fprintf(pipe, "Some data");
…

// When you're done with the pipe:
pclose(pipe);

FILE *で初期化する永続変数 (オブジェクト メンバー変数など) にパイプを格納することで、プログラムが 1 回だけ開始されるようにすることができますNULL。次に、 で 2 つ目のアプリケーションを既に開始しているかどうかを簡単に確認できますpipe != NULL

于 2013-07-29T05:39:48.570 に答える