Bloqueo de la salida de error estándar de un comando del sistema ejecutado mediante programación

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

Pregunta

Tengo este programa en c ++:

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

Cuando lo ejecuto, lo compilo y escribo, por ejemplo, "hola", mi programa imprime el error:

  "helo" not found.

¿Puedo evitar que se muestre este error? ¿Hay alguna forma de deshabilitar el error del comando del sistema?

¿Fue útil?

Solución

No puede cambiar la forma en que system muestra los errores. C y C ++ imponen muy poco o ningún requisito a las implementaciones en ese sentido, de modo que grandes partes de este se dejan sin especificar, para permitir que sean lo más flexibles posible.

Si desea un control más preciso, debe usar las funciones de su biblioteca de tiempo de ejecución o interfaz del sistema operativo. Pruebe execvp (consulte man execvp ) en linux / unix o la función CreateProcess para sistemas Windows, que utiliza la API de Windows que permite un gran control sobre el manejo de errores y otras cosas.

Otros consejos

¿Estás en Linux? Intenta escribir " ./ hello "

Si esto funciona, la razón es que el directorio actual (". ") no está en la ruta de búsqueda. Debe indicar que el programa compilado está " allí " en el directorio.

Alternativamente, puedes hacer algo como

export PATH = $ PATH :.

Esto agrega ". " (directorio actual) a la ruta de búsqueda.

Si está en Windows, intente " hello.exe "

Si está en Linux, ¿puede intentar redirigir la salida de error al dispositivo null ?

strcat(buf, "2> /dev/null");
system(buf);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top