Это неэффективно (требует разветвления и исполнения / bin / sh ). Там должен быть лучший путь! Но как общий подход ... Всегда есть system () .
(Не забывайте использовать WEXITSTATUS () ! Следите за тем, чтобы программы не прерывались!)
#define SHOW(X) cout << # X " = " << (X) << endl
int main()
{
int status;
SHOW( status = system( "which grep > /dev/null 2>&1" ) );
SHOW( WEXITSTATUS(status) );
SHOW( status = system( "which no_matching_file > /dev/null 2>&1" ) );
SHOW( WEXITSTATUS(status) );
}
Существует также popen () , который может быть полезен для получения выходных данных программ для проверки номеров версий, библиотек или чего-то еще.
Если вам нужен двунаправленный (чтение и запись) доступ к подпроцессу, лучше всего использовать pipe () , fork () , exec () , close () , & dup2 () .