Системный вызов не работает, как в командной строке
-
19-09-2019 - |
Вопрос
Хорошо, у меня есть две программы, и одна вызывает другую, используя исполняемый файл с другой. Я запускаю его на терминале 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.
Так что, если я запускаю эту команду из командной строки, она работает отлично хорошо.
Если я запускаю его, используя System Call, он висит и не проанализирует входной файл SPH0.0000.SC, я попытался добавить полный путь (следовательно, переменная путь вверх)
Но все равно не повезло.
Любые идеи, почему это будет работать из командной строки, а не от системного вызова в пределах другого исполняемого файла ...
Просто чтобы прояснить, он работает из командной строки в папке PGM1.
Спасибо
Решение
Ты используешь >
что что -то значит для многих раковинов, но я подозреваю, что не 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);
И дайте нам знать, как это происходит.