C -> system-Befehl

*cerox*

Lt. Commander
Registriert
Feb. 2005
Beiträge
1.357
Hallo zusammen,

ich wollte gerade mal den system-Befehl in C ausprobieren.

Normalerweise hat er folgende Syntax: system("string")

Also z.B. system("ping 192.168.1.1")
oder system("dir")

Naja aber das funktioniert nicht wirklich. Ich kann es zwar kompilieren, aber dann wird nur ein schwarzer Bildschirm angezeigt.

Kann mir jemand sagen was ich falsch mache?
 
Ok, ich hab das noch nit in C gemacht, aber Delphi...

Müsstest du nicht erstmal den Rückgabewert dieser Funktion (?) ausgeben, damit du etwas rausbekommst?! Wie sollte das Programm denn wissen, wo der Rückgabewert hin soll?
 
Es steht direkt in der main-Funktion. Dadurch brauche ich auch keinen Rückgabewert.

Ich war das so von PHP gewohnt; da kann ich ja z.B. an eine Linux-Shell ein Kommando übergeben mit system(befehl);

Und dann habe ich irgendwo den Befehl auch für C gelesen und das der system Befehl die COMMAND.COM in den Arbeitsspeicher lädt. Dann lassen sich Kommandos ausführen.
 
Jap die Syntax und Semantik in deinem kleinenProgramm sind korrekt..unter C/C++ ist es

PHP:
system("DIR");
system("PING 128.1.1.1");
system("PAUSE");

so funktioniert es bei mir ohne probs..auch mit C oder C++
Er zeigt alles auf STDOUT (Bildschirm) an.
 
Ich habe gerade gelesen, bei fehlerfreier Ausführung gibt der Befehl system 0 zurück. Das habe ich jetzt mal mit if überprüft - es wird keine 0 zurückgegeben, d.h. ein Fehler muss aufgetreten sein.

Kann es sein dass die auszuführenden Befehle in der PATH-Variable stehen müssen? Aber das kann ja bei internen Befehlen von DOS wie "dir" nicht sein.

EDIT:
Hab nochmal geguckt, es wird -1 zurück gegeben.
 
Welche Libary ähm Headerfiles hast du einbeunden?
-1 als return bedeutet Fehler mh, bei mir funzt es.

PHP:
#include iostream
namepsace std;

int main() {

     system("PAUSE") /*SYSTEM IS WAITING FOR ANY KEY*/
     return 0;
}
 
Ich habe die Librarys eingebunden, die ich benötige:

Code:
#include <iostream.h>
#include <conio.h>
#include <process.h>

void main (void)
{
	int a;
	clrscr();
	a=system("dir");
	cout <<a;
	getch();
}

iostream für cout, process.h für system, conio brauche ich für clearscreen und getch. Aber das hat ja mit dem Fehler nichts zu tun bei korrekter Ausführung müsste a den Wert 0 haben - es hat aber den Wert -1.
 
Code:
#include <iostream>
#include <cstdlib>
#include <conio.h>

int main()
{
	using namespace std;

	clrscr();
	int a =system("dir");
	cout <<a << endl;
	system("pause");
	return 0;
}

sollte es tun. system kommt aus <cstdlib> C++, bzw. <stdlib.h> unter C. Ein Rückgabewert von -1 bedeutet, dass bei der Ausführung des Befehls ein Fehler aufgetreten ist.

Wenn du etwas wie "dir" aufrufst, bedeutet das, dass der Kommandozeileninterpreter gestartet wird (üblicherweise command.com oder cmd) und seinen eingebauten Befehl dir ausführt. Dazu erbt er von deiner Anwendung die Standardausgabe und schreibt seine Ergebnisse in diese. Wenn dein Programm also in einer Konsole gestartet wird, wird der das Ergebnis vom system-Aufruf üblicherweise auch in diese geschrieben.
 
Zurück
Oben