0

私は2つのプログラムを持っています.1つは別の実行可能ファイルを使用して別のプログラムを呼び出します. Ubuntuターミナルで実行しています

これは適切なフォルダ構造です

.../src/pgm1/pgm1 .../src/pgm0/pgm0

pgm1 と pgm0 は実行可能ファイルです。

これは、他の実行可能ファイルを呼び出す方法です

char cmd[1000]; string path = "/home/usr/src/"; // call pgm0 for each instance... sprintf( cmd, "../pgm0/pgm0 xRes 400 xRes 400 inFile tmp_output/%s.%04d.sc > tmp_output/%s.%04d.ppm", g_outFile.c_str(), ti, g_outFile.c_str(), ti); cout << cmd << endl; system (cmd); ....

私が調べたところ、cmd は適切に生成されています: ../pgm0/pgm0 yRes 400 xRes 400 inFile tmp_output/sph0.0000.sc > tmp_output/sph0.0000.ppm

したがって、コマンドラインからこのコマンドを実行すると、完全に機能します。

システム コールを使用して実行すると、ハングして入力ファイル sph0.0000.sc の解析に失敗します。

しかし、まだ運がありません。

これがコマンドラインからではなく、別の実行可能ファイル内のシステムコールからではなく、なぜ機能するのでしょうか...

明確にするために、フォルダーpgm1のコマンドラインから動作します。

ありがとう

4

1 に答える 1

1

あなたは>これを多くのシェルに使用していますが、私はそうではないと思いsystemます。これを試して:

snprintf( cmd, sizeof cmd,
    "/usr/bin/bash -c '../pgm0/pgm0 xRes 400 xRes 400"
    " inFile tmp_output/%s.%04d.sc > tmp_output/%s.%04d.ppm'",
    g_outFile.c_str(), ti, g_outFile.c_str(), ti);

そして、それがどうなるか教えてください。

于 2009-11-13T03:55:09.823 に答える