Блокировка стандартного вывода ошибок системно запускаемой системной команды - PullRequest
1 голос
/ 16 января 2009

У меня есть эта программа на C ++:

#include <iostream>
using namespace std;
int main()
{
char buf[50];
cin.getline(buf,49);
system(buf);
return 0;
}

Когда я запускаю и компилирую его и набираю, например, «helo», моя программа выводит сообщение об ошибке:

  "helo" not found.

Можно ли остановить отображение этой ошибки? Есть ли способ отключить ошибку из системной команды?

Ответы [ 3 ]

8 голосов
/ 16 января 2009

Вы не можете изменить способ отображения ошибок system. В этом отношении C и C ++ практически не предъявляют никаких требований к реализациям, поэтому большие его части остаются неуказанными, что позволяет им быть максимально гибкими.

Если вы хотите более точного управления, вам следует использовать функции вашей библиотеки времени выполнения или интерфейса операционной системы. Попробуйте execvp (см. man execvp) в linux / unix или функцию CreateProcess для систем Windows, которая использует Windows API, который дает отличный контроль над обработкой ошибок и другими вещами

4 голосов
/ 16 января 2009

Вы на Linux? Попробуйте набрать "./hello"

Если это работает, причина в том, что текущий каталог (".") Не находится в пути поиска. Вы должны указать, что скомпилированная программа находится «там» в каталоге.

Кроме того, вы можете сделать что-то вроде

экспорт PATH = $ PATH:.

Это добавляет "." (текущий каталог) к пути поиска.

Если вы находитесь в Windows, попробуйте "hello.exe"

2 голосов
/ 16 января 2009

Если вы работаете в Linux, можете ли вы попытаться перенаправить вывод ошибки на устройство null?

strcat(buf, "2> /dev/null");
system(buf);
...