Ich verwende den Befehl system
in C ++, um ein externes Programm aufzurufen, und wenn ich es verwende, öffnet und schließt sich ein Konsolenfenster, nachdem der Befehl beendet ist.
Wie kann ich das Öffnen eines Konsolenfensters vermeiden? Ich würde mich freuen, wenn die Lösung plattformunabhängig wäre. Ich möchte auch, dass mein Programm wartet, bis der Befehl beendet ist.
Es klingt, als ob Sie Windows benutzen.
Unter Linux (und * nix im Allgemeinen) würde ich den Aufruf von system
durch Aufrufe von fork
bzw. exec
ersetzen. Unter Windows denke ich, dass es eine Art Spawn-eine-neue-Prozess-Funktion in der Windows-API gibt - konsultiere die Dokumentation.
Wenn Sie Shell-Befehle und / oder externe Programme ausführen, ist Ihr Programm kaum plattformunabhängig, da es von der Plattform mit den Befehlen und / oder externen Programmen abhängt, die Sie ausführen.
Dies ist wahrscheinlich der einfachste und vielleicht der beste Weg, dies wird auch dazu führen, dass Ihr Programm nicht einfriert, während Sie diesen Befehl ausführen. Vergessen Sie zunächst nicht, den Windows-Header mit zu verwenden;
%Vor%Dann müssen Sie die folgende Funktion verwenden, um Ihren Befehl auszuführen;
%Vor% Hinweis; Die WinExec
-Methode ist seit über einem Jahrzehnt veraltet. Trotzdem funktioniert es heute noch gut. Sie sollten diese Methode nicht verwenden, wenn sie nicht benötigt wird.
... anstatt wie Sie nicht verwenden möchten;
%Vor%exec () sieht ziemlich plattformunabhängig aus, da es POSIX ist. Unter Windows ist es _exec () während es exec () unter Unix ist: Siehe Ссылка
Hier können Sie Befehle ohne ein neues cmd.exe
-Fenster ausführen. Basiert auf Roland Rabiens Antwort und MSDN habe ich eine funktionierende Funktion geschrieben:
Funktioniert auf allen Windows-Plattformen. Rufen Sie an, als würden Sie system()
.
Tags und Links c++ console system-calls system