0

以下のように、solaris UNIX で mml コマンドを実行するために使用するインターフェイスがあります。

> eaw 0004
<RLTYP; 
BSC SYSTEM TYPE DATA

GSYSTYPE
GSM1800

END
<

コマンド ラインで実行するとすぐにeaw <name>、mml コマンドを実行できるインターフェイスが開始され、実行されたコマンドの出力を確認できます。

ここでの私の考えは、C++ でコマンド出力を解析することです。解析のためのいくつかのロジックを取り除くことができます.しかし、まず、コマンドを c++ 内で実行するにはどうすればよいですか? これを行うための事前定義された方法はありますか。これは、C++ 内で SQL クエリを実行するのと似ているはずですが、他のライブラリを使用して SQL クエリを実行します。また、シェル スクリプトを実行したり、間に一時ファイルを作成したりしたくありません。

私が望むのは、C ++内でコマンドを実行し、出力を取得し、それをC ++で取得することです。誰かが私に正しい道順を教えてもらえますか?

4

2 に答える 2

1

いくつかのオプションがあります。使用するのが最も簡単で最も単純なものから最も困難で最も複雑なものまで:

  • 呼び出しを使用しsystem()てシェルを生成し、コマンドを実行します
  • この呼び出しを使用しpopen()てサブプロセスを生成し、標準入力ストリームに書き込むか、標準出力ストリームから読み取ります(両方ではありません)。
  • pipe()、、/fork()、およびの組み合わせを使用して、子プロセスを生成し、子プロセスの標準入力および出力用のパイプを設定します。dup()dup2()exec*()
于 2013-03-19T06:48:19.717 に答える
0

以下のコードはshコマンドで実行されます。これにより、「out」という名前のファイルにリダイレクトされます。このstdoutファイルは、後で読み取って出力を処理できます。プロセスへの各コマンドは、パイプを介して書き込むことができます。

#include <stdio.h>
int main()
{
        FILE *fp;
        fp = popen("sh > out", "w");
        if (fp) {
                fprintf(fp, "date\n");
                fprintf(fp, "exit\n");
                fclose(fp);
        }
        return 0;
}
于 2013-03-19T06:58:48.293 に答える