Системный вызов не работает, как в командной строке

StackOverflow https://stackoverflow.com/questions/1726236

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top