Blocco dell'output di errore standard di un comando di sistema eseguito a livello di codice
-
19-08-2019 - |
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?
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);