Blocco dell'output di errore standard di un comando di sistema eseguito a livello di codice

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

Domanda

Ho questo programma in c ++:

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

Quando lo eseguo e lo compilo e scrivo ad esempio "quot" helo ", il mio programma stampa l'errore:

  "helo" not found.

Posso interrompere la visualizzazione di questo errore? Esiste un modo per disabilitare l'errore dal comando di sistema?

È stato utile?

Soluzione

Non puoi cambiare il modo in cui system visualizza gli errori. C e C ++ impongono pochissimi requisiti alle implementazioni in tal senso, in modo che grandi parti di esso non vengano specificate, per consentire loro di essere il più flessibili possibile.

Se si desidera un controllo più preciso, è necessario utilizzare le funzioni della libreria di runtime o dell'interfaccia del sistema operativo. Prova execvp (vedi man execvp ) in linux / unix o la funzione CreateProcess per i sistemi Windows, che utilizza l'API di Windows che consente un ottimo controllo sulla gestione degli errori e altre cose.

Altri suggerimenti

Sei su Linux? Prova a digitare " ./ ciao "

Se funziona, il motivo è che la directory corrente (". ") non si trova nel percorso di ricerca. Devi indicare che il programma compilato è " là " nella directory.

In alternativa, puoi fare qualcosa del genere

export PATH = $ PATH :.

Questo aggiunge ". " (directory corrente) al percorso di ricerca.

Se sei su Windows, prova " hello.exe "

Se sei su Linux, puoi provare a reindirizzare l'output dell'errore sul dispositivo null ?

strcat(buf, "2> /dev/null");
system(buf);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top