Blockierung der Standard-Fehlerausgabe eines programmatisch ausführen Systembefehl
-
19-08-2019 - |
Frage
Ich habe dieses Programm in C ++:
#include <iostream>
using namespace std;
int main()
{
char buf[50];
cin.getline(buf,49);
system(buf);
return 0;
}
Wenn ich laufen und kompilieren Sie es und geben Sie zum Beispiel „helo“, mein Programm druckt den Fehler:
"helo" not found.
Kann ich diesen Fehler verhindern angezeigt? Gibt es eine Möglichkeit, die Fehler aus dem Systembefehl zu deaktivieren?
Lösung
Sie können nicht die Art und Weise system
zeigt Fehler ändern. C und C ++ setzen sehr wenig bis gar keine Anforderungen an Implementierungen in dieser Hinsicht, so dass große Teile davon nicht spezifiziert bleiben, sie zu erlauben, so flexibel wie möglich zu sein.
Wenn Sie eine genauere Kontrolle wollen, sollten Sie die Funktionen Ihrer Laufzeitbibliothek oder Betriebssystem-Schnittstelle verwenden. Versuchen execvp
(siehe man execvp
) in Linux / Unix oder der Funktion Createprocess für Windows-Systeme, die das Windows-API verwendet, die große Kontrolle über die Fehlerbehandlung und andere Sachen erlaubt.
Andere Tipps
Sind Sie auf Linux? Versuchen Sie "./hello"
eingebenWenn das funktioniert, ist der Grund dafür, dass das aktuelle Verzeichnis ( „“) ist nicht im Suchpfad. Sie müssen zeigen, dass das kompilierte Programm „dort“ im Verzeichnis ist.
Alternativ können Sie wie etwas tun
export PATH = $ PATH:.
Das fügt "" (Aktuelles Verzeichnis) zum Suchpfad.
Wenn Sie auf Fenster sind, versuchen Sie "hello.exe"
Wenn Sie auf Linux sind, können Sie die Fehlerausgabe in die null
Gerät versuchen Umleitung?
strcat(buf, "2> /dev/null");
system(buf);