Есть несколько факторов, которые необходимо учитывать. Одним из ключевых является надежность наличия внешней программы во всех системах, где установлено ваше программное обеспечение. Если есть вероятность, что он будет отсутствовать, возможно, лучше сделать это внутри вашей программы.
В противовес этому, вы можете считать, что дополнительный код, загружаемый в вашу программу, является запретительным - вам не нужно раздувать код для такой редко используемой части вашего приложения.
Функция system () удобна, но опасна, не в последнюю очередь потому, что обычно она вызывает оболочку. Возможно, вам лучше вызывать программу более напрямую - в Unix, через системные вызовы fork () и exec (). [Обратите внимание, что системный вызов очень отличается от вызова функции system()
, кстати!] OTOH, вам может потребоваться заботиться о том, чтобы все дескрипторы открытых файлов в вашей программе были закрыты - особенно если ваша программа работает на каком-то демоне, работающем от имени других пользователей; это не проблема, если вы не используете специальные привилегии, но все же будет хорошей идеей не предоставлять вызванной программе доступ ко всему, что вы не намеревались. Возможно, вам придется взглянуть на системный вызов fcntl()
и флаг FD_CLOEXEC
.
Как правило, легче контролировать вещи, если вы встраиваете функциональность в свою программу, но это не тривиальное решение.