Запустите другую программу в Linux из программы на C ++ - PullRequest
11 голосов
/ 03 февраля 2012

Хорошо, мой вопрос такой. Скажем, у меня есть простой код C ++:

#include <iostream>
using namespace std;

int main(){
   cout << "Hello World" << endl;
   return 0;
}

Теперь скажите, что у меня есть эта программа, которую я хотел бы запустить в моей программе, назовите ее prog. Запуск этого в терминале может быть сделан:

./prog

Есть ли способ сделать это из моей простой программы на C ++? Например

#include <iostream>
using namespace std;

int main(){
   ./prog ??
   cout << "Hello World" << endl;
   return 0;
}

Любая обратная связь будет очень благодарна.

Ответы [ 5 ]

14 голосов
/ 03 февраля 2012

Вы хотите библиотечный вызов system(); см. system (3) . Например:

#include <cstdlib>

int main() {
   std::system("./prog");
   return 0;
}

Точная командная строка, конечно, будет зависеть от системы.

8 голосов
/ 09 февраля 2012

Вы также можете использовать popen

#include <stdio.h>

int main(void)
{
        FILE *handle = popen("./prog", "r");

        if (handle == NULL) {
                return 1;
        }

        char buf[64];
        size_t readn;
        while ((readn = fread(buf, 1, sizeof(buf), handle)) > 0) {
                fwrite(buf, 1, readn, stdout);
        }

        pclose(handle);

        return 0;
}
3 голосов
/ 03 февраля 2012

Вы можете использовать системную команду:

system("./prog");
3 голосов
/ 03 февраля 2012

Вы можете использовать системный вызов, подобный этому: http://www.cplusplus.com/reference/clibrary/cstdlib/system/

Осторожно, если вы используете пользовательский ввод в качестве параметра, это хороший способ иметь некоторые непредвиденные последствия.Очистить все!

Как правило, системные вызовы могут быть истолкованы как плохая форма.

3 голосов
/ 03 февраля 2012

Попробуйте system (3) :

system("./prog");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...