системный вызов не работает как в командной строке - PullRequest
0 голосов
/ 13 ноября 2009

Хорошо, у меня есть две программы, и одна вызывает другую, используя исполняемый файл другой. Я использую его на терминале Ubuntu

Это структура папок на месте

... / SRC / PGM1 / PGM1 ... / SRC / pgm0 / pgm0

pgm1 и pgm0 являются исполняемыми файлами.

Так я называю другой исполняемый файл

</p>

    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.

Спасибо

1 Ответ

1 голос
/ 13 ноября 2009

Вы используете >, что означает что-то для многих оболочек, но я подозреваю, что не 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);

И дайте нам знать, как это происходит.

...