system() Alternative?
-
Guten Morgen Community!
Ich benutzte zur Zeit immer die Funktion system() doch muß ich sagen das es mir nicht gefällt da diese Funktion immer aus meinem Programm eine Konsule öffnet und den eingetragegen Befehl abarbeitet und dann sich wieder schließt!
Ich suche eine Funktion die keine Konsule/Eingabeaufforderung öffnet und den Befehl darin abarbeitet!
Hätte da jemand eine Alternative für mich?
-
Eine generelle Alternative zu system() kenne ich nicht (außer systemspezifischen Funktionen wie exec() oder CreateProcess(), die aber vergleichbare Probleme machen). Aber vieles, was typischerweise über system()-Aufrufe abgewickelt wird, kann C auch selber erledigen (z.B. getchar() statt system("pause") oder die conio.h anstelle von system("cls")).
-
... und wenn ich jetzt zum Beispiel sowas habe:
system("cd > tmp") oder system("dateiname.exe -p -a") ?
(EDIT)
Ah also wenn ich jetzt z.B. exec("cd >tmp") oder exec("dateiname.exe -p -a") eingebe sollte es auch gehen oder? Aber was ist da der Negative beigeschmack? auch eine Konsulen öffnung?
-
CStoll schrieb:
Aber vieles, was typischerweise über system()-Aufrufe abgewickelt wird, kann C auch selber erledigen (z.B. getchar() statt system("pause") oder die conio.h anstelle von system("cls")).
Ich weiß was du meinst, aber "typischerweise" ruft man mit system andere Programme auf. Ich will sehen wie du das anders mit Bordmitteln hinkriegst
-
Ich habe gerade mal etwas gegoogelt und es gibt da popen() die ist allederings AFAIK und nicht ANSI-C. Ist halt POSIX !
Leider wird die nicht vom MS VC++ im Compiler erkannt. Aber gcc kennt es
popen("datei.exe -a -o","r");
Auf diese Weise kann man einen Befehl ausführen und die Ausgabe wie eine Ausgelesene Datei behandel! Leider hilf es in meinem Fall mir nicht wirklich weiter da es mein Compiler MS VC++ nicht unterstütz. Aber der winGW oder gcc kennt es
// TIP
-
Yellow schrieb:
Ich benutzte zur Zeit immer die Funktion system() doch muß ich sagen das es mir nicht gefällt da diese Funktion immer aus meinem Programm eine Konsule öffnet und den eingetragegen Befehl abarbeitet und dann sich wieder schließt!
die 'konsule' öffnet sich nur bei konsulenprogrammen. startest du z.b. 'notepad.exe' dann ist nix mit konsule. batch und cmd-scripts, cmd.exe etc. unter windoofs kannste mit CreateProcess() starten und dabei die ein- und ausgaben über pipes umleiten --> keine konsule.
wie's genau geht, frage bitte im winapi-forum.
-
CreateProcess() ist es gewesen. Ich danke dir