2009-11-12 21 views
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 Y残余物400 XRES 400 INFILE tmp_output/sph0.0000.sc> tmp_output/sph0.0000.ppm

所以如果我从命令行运行这个命令,它工作得很好。

如果我运行使用系统调用它它挂起和失败来解析输入文件sph0.0000.sc 我尝试添加完整路径(因此路径变量上)

但仍没有运气。

任何想法,为什么会在命令行这项工作,而不是从其它可执行文件中的系统调用...

只是要清楚它的命令行工作在文件夹PGM1。

感谢

+0

听起来像一个路径问题。什么是字符串路径= ...在源中?也许你想先在那里找到? – ataylor

+0

字符串路径对于文件夹中可执行文件... 我加它那里尝试与 /home/.../src/pgm0代替../pgm0 但我删除它的sprintf,使其更简单绝对路径阅读 – grobartn

+0

你的pwd是从哪里运行这个编译的程序pgm0 dir的同级目录,而你的当前目录有tmp_output子目录? –

回答

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); 

,让我们知道如何继续下去。