系统调用在命令行中不起作用

时间:2009-11-12 23:51:05

标签: c++ unix system-calls

好的我有两个程序,一个使用另一个可执行文件调用另一个程序。 我在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&gt; tmp_output / sph0.0000.ppm

因此,如果我从命令行运行此命令,它可以很好地工作。

如果我使用系统调用运行它,它会挂起并无法解析输入文件sph0.0000.sc 我尝试添加完整路径(因此路径变量)

但仍然没有运气。

任何想法为什么这可以从命令行工作而不是从另一个可执行文件中的系统调用...

只是为了清楚说明它可以在文件夹pgm1中的命令行中运行。

由于

1 个答案:

答案 0 :(得分: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);

让我们知道这是怎么回事。