Блокировка стандартного вывода ошибок системно запускаемой системной команды

StackOverflow https://stackoverflow.com/questions/451595

Вопрос

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

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

Когда я запускаю и компилирую его и набираю, например, " helo ", моя программа печатает ошибку:

  "helo" not found.

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

Это было полезно?

Решение

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

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

Другие советы

Вы на Linux? Попробуйте ввести & Quot; ./ hello & Quot;

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

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

export PATH = $ PATH:.

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

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

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

strcat(buf, "2> /dev/null");
system(buf);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top