0

好的,我有两个程序,一个使用另一个程序的可执行文件调用另一个程序。我在 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 回答