Как я могу общаться с командной строкой (CMD), используя C ++? - PullRequest
1 голос
/ 31 октября 2011

У меня есть приложение, которое должно отправить команду в cmd, а затем вернуть выходной результат (захватить вывод). Как это может быть достигнуто с использованием C ++ без использования какого-либо специального API для MS Windows? Есть ли способ сделать это кроссплатформенным (например, для терминалов linux)? Кстати я на Win XP SP3.

Я на самом деле имею в виду перенаправление ввода / вывода. Например, запустите команду «make» на cmd, а затем в случае перехвата сообщения об ошибке (перенаправление в мое приложение).

Ответы [ 4 ]

2 голосов
/ 31 октября 2011

Как уже упоминалось: если вы можете избежать запуска дочерних процессов в вашей программе и вместо этого вписаться в более широкую "метафору набора инструментов", это часто может быть лучше ...

http://en.wikipedia.org/wiki/Unix_philosophy

Но если это не подходит для вашего проекта, посмотрите Boost.Process .

Кроме того: если вы используете Qt (на что приятно смотреть в любом случае), есть также QProcess .

1 голос
/ 31 октября 2011

Разве вы не можете просто использовать обычные cin и cout, которые предоставляет C ++? (конечно, если ваша программа представляет собой программу с графическим интерфейсом, cin и cout не будут подключены ни к чему полезному, если вы не вызовете команду Windows AllocConsole () ... но Windows работает именно так. Если вам нужен код, который также компилируется в Linux и т. Д., Вы можете поместить #ifdef WIN32 вокруг этого вызова)

1 голос
/ 31 октября 2011

Хорошо, функция system () , которая является частью стандартов C89 и C99, доступна в Linux и Windows и позволяет выполнять команды внутри C / C ++.

0 голосов
/ 31 октября 2011

По умолчанию большинство систем получают стандартный ввод с клавиатуры, поэтому обычно ожидается, что cin получит информацию от пользователя, хотя во многих случаях ее можно перенаправить на другой источник.

Youможет сделать что-то вроде:

cout << "How old are you?" << endl;
int age;
cin >> age;
...