Befehle ausführen mit c++

Hallo ich würde gerne programm programmieren das befehle ausführt als hatte man sie in der Eingabeaufforderung geschrieben, wie geht das.

Hallo Michael,

meinst du mit Eingabeaufforderung den Prompt einer Unix- oder DOS-Shell, von der aus auch z.B. dein C++ Programm aufgerufen werden könnte?

Dein C++ Programm soll also Befehle ausführen

…als hatte man sie in der Eingabeaufforderung geschrieben…

Man hätte sie also in der Eingabeaufforderung geschrieben, hat es aber nicht getan (da die Shell erst wieder einen Prompt ausgeben wird, wenn das laufende C++ Programm beendet sein wird). Aber welche Befehle soll das C++ Programm ausführen? Befehle, die bereits während des Programmierens des C++ Programms feststehen? Befehle, die aus einer Datei eingelesen werden? Befehle, die der Benutzer via Mausklicks angibt?

Aber selbst wenn feststeht, welcher Befehl ausgeführt werden soll, weiß noch niemand, was es bedeuten soll, dass dieser Befehl eigentlich via Eingabeaufforderung eingegeben worden wäre. Was passiert, wenn etwas in einer Eingabeauffordung eingegeben wird? Das hängt ganz entscheidend davon ab, welcher Kommandozeileninterpreter verwendet wird, wie dieser konfiguriert ist und welcher Kontext vorliegt (z.B. welche Umgebungsvariablen in einer Unix-Shell definiert sind).

Du siehst, deine Frage wirft viele Fragen auf. Vielleicht solltest du dein Problem etwas ausführlicher formulieren, dann wird es viel einfacher, darauf zu antworten.

Viele Grüße,
Jens

Neue Frage:

Kann man ein Programm schreiben das die MS Dos Funktion ping startet?

Hallo Fragewurm,

Neue Frage:

Kann man ein Programm schreiben das die MS Dos Funktion ping
startet?

Ja :wink:
.
.
.
.
.
.
.
.
.
.
.
.
z.B. mit dem Befehl system()
Je nach Compiler gibt es auch noch andere Möglichkeiten, diese stehen alle im Handbuch, bzw. der Hilfe.

MfG Peter(TOO)

Neue Frage:

Kann man ein Programm schreiben das die MS Dos Funktion ping
startet?

Hallo,

wie Peter schon sagte, ja - aber was willst du mit einem DOS-Ping ? Hast du einen TCP/IP-Stack, der unter MSDOS läuft? Verträgt der sich mit deinem Windows? Ich glaube eher nicht.

Falls du ein Win32-ping meinst, auch ja, ist aber wieder ein ganz anderes Thema. Solche Programme startet man meistens mit ShellExecute.

Grundsätzliche Frage: ping start man mit ping. Was soll ein Programm, das ping startet?

Gruss Reinhard

Neue Frage:

Kann man ein Programm schreiben das die MS Dos Funktion ping
startet?

Hallo,

wie Peter schon sagte, ja - aber was willst du mit einem
DOS-Ping ? Hast du einen TCP/IP-Stack, der unter MSDOS läuft?
Verträgt der sich mit deinem Windows? Ich glaube eher nicht.

Falls du ein Win32-ping meinst, auch ja, ist aber wieder ein
ganz anderes Thema. Solche Programme startet man meistens mit
ShellExecute.

Ich meine ein Programm das das Win32-ping und das soll dann testen welche addressen alle im Netzwerk aktiv sind

Hallo,

Ich meine ein Programm das das Win32-ping und das soll dann
testen welche addressen alle im Netzwerk aktiv sind

das ist selbst mit VB kein Probelm, sollte also für C++ eine leichte Übung sein. Für VB hätte ich auch einen Quellcode. :smile: Wenn Du den nach C++ umschreiben kannst …

Gruß, Rainer

Hi,

Ich meine ein Programm das das Win32-ping und das soll dann
testen welche addressen alle im Netzwerk aktiv sind

für C++ habe ich auch Beispiele gefunden.

http://www.planetsourcecode.com/vb/scripts/BrowseCat…

Gruß, Rainer

Gibt es da nicht einfach einen befehl der bewirkt das ping ausgeführt wird wie nur so als ausgedachtes beispiel win32ping(192.168.*.*)?

hallo Michael,

Gibt es da nicht einfach einen befehl der bewirkt das ping
ausgeführt wird wie nur so als ausgedachtes beispiel
win32ping(192.168.*.*)?

int main()
{
system("");
return 0;
}

so geht’s. Bei den „“ schreibst Du dann ping oder was Du gerne möchtest, geradeso wie am prompt, und macht er.
Ev. brauchst du die „#include windows.h“, weiß ich jetzt nicht.

lg
Martin B

int main()
{
system("");
return 0;
}

so geht’s. Bei den „“ schreibst Du dann ping oder was Du gerne
möchtest, geradeso wie am prompt, und macht er.
Ev. brauchst du die „#include windows.h“, weiß ich jetzt
nicht.

geht das auch das man

int main()
{
for(int i = 1; i

Hallo Michael,

geht das auch, dass man

> int main()  
> {  
> for(int i = 1; i   
> also dass man die letzte Zahl durch eine Variable ersetzt?

Ja, das geht. In C++ kann man dazu **Stringstreams** benutzen:

    
    #include 
    #include 
    
    int main()
    {
     for (int i = 1; i In C bewerkstelligt man dies mit **sprintf()**:
    
        
        const int MAX\_LENGTH = 50;
        
        int main()
        {
         int i;
        
         for (i = 1; i 
        Da **system()** als Argument ein C-String verlangt, kann man ihr kein C++ String-Objekt übergeben. Ein C++ String-Objekt hat jedoch die Memberfuntion **c\_str()**, die ein C-String zurückliefert. Deshalb steht in der C++ Version **system( command._c\_str()_ )**.
        
        Viele Grüße,
        Jens

blöde Frage kann ich bei der Zeile
command = „ping 192.168.*.“+ osst.str();
Stern auch durch eine Variable ersetzten?

Hallo Michael,

kann ich bei der Zeile
command = „ping 192.168.*.“+ osst.str();
[den] Stern auch durch eine Variable ersetzten?

Natürlich:

int main()
{
 string command;
 ostringsstream A, B, C, D;
 int a=192, b=168, c=42, d=99;

 A 

Viele Grüße,
Jens

Hallo Michael,

kann ich bei der Zeile
command = „ping 192.168.*.“+ osst.str();
[den] Stern auch durch eine Variable ersetzten?

Natürlich:

int main()
{
string command;
ostringsstream A, B, C, D;
int a=192, b=168, c=42, d=99;

A

gibt das ping hier eine boolische Wert zurück oder wie das auch immer heisst? und kann ich das dann auch anzeigen lassen was da eine antwort gesendet hat und was nicht?

Hallo Michael,

gibt das ping hier eine boolische Wert zurück oder wie das
auch immer heisst? und kann ich das dann auch anzeigen lassen
was da eine antwort gesendet hat und was nicht?

Das via system() aufgerufene ping macht nichts anderes als ein ping, welches von der Eingabeaufforderung einer Shell aus aufgerufen wird. Es sendet Datenpakete, empfängt Datenpakete und teilt seine Ergebnisse via Standadrausgabe (z.B. dem zur Shell gehörenden Terminal) mit. Das Programm ping weiß ja gar nichts davon, dass es ein anderes Programm (in einem anderen Prozess) gibt, welches diese Informationen gern haben möchte. Selbst wenn ping dies wüsste, hätte es keine Möglichkeit, dem anderen Programm seine Ergebnisse auf direktem Weg mitzuteilen, da die Programme in verschiedenen Prozessen laufen.

Eine Möglichkeit, an die Ergebnisse des ping-Befehls heranzukommen, ist das Umlenken der ping-Ausgabe in eine Datei mit anschließendem Auslesen dieser Datei (allerdings nur unter unix-artigen Betriebssystemen):

int retval;
ifstream fin;

retval = system( "ping -c 1 192.168.178.22 \> output.txt" );
fin.open( "output.txt" );
...

Die Option -c 1 gibt an, dass genau 1 Datenpaket gesendet (und gegebenenfalls empfangen) werden soll. Der Rückgabewert der system()-Funktion gibt Auskunft darüber, ob das Erzeugen eines Tochterprozesses mit darin aufgerufener Shell (diese Shell ruft das Programm auf, das im Argument der system()-Funktion genannt wird) erfolreich funktioniert hat. Dieses ganze Verfahren mit dem system() ist allerdings eine sehr unelegante Methode herauszubekommen, welche IPs in einem Netzwerk aktiv sind.

Als Alternative zu system( „ping …“ ) könnte man sich seine eigene C ping-Funktion schreiben. Dies ist zum Beispiel unter folgendem Link nachzulesen:
http://www.lk.etc.tu-bs.de/lists/archiv/lug-bs/2000/…

Viele Grüße,
Jens

okay, danke. Das sieht alles ihrgendwie anders aus das mit den Textdateien wie in den buch das ich da gelesen habe da steht das das anders geht

int main(void)
{
FILE *Datei;
Datei = fopen(„c:\test.txt“, „w“);
fprintf(Datei, „hier ihrgendwas eingeben“);
fclose(Datei);
Datei = fopen(„c:\test.txt“, „rt“);
char Puffer[256];

if(NULL == Datei)
{

return -1;
}

while(!feof(Datei))
{
fgets(Puffer, 255, Datei);
cout

Hallo Michael,

Geht das auch oder ist das bloss bei windows so?

Ja, das geht, und zwar unabhängig vom Betriebssystem. Die Funktionen fopen(), fclose() und fprintf() stammen aus der Standard-C-Input/Output-Bibliothek (#include ), wohingegen fstream, ifstream und ofstream C++ Objekte aus der C++ Standardbibliothek sind (#include ).

Folgenden Link solltest du mal aufrufen:
http://www.cppreference.com/index.html

Insbesondere
http://www.cppreference.com/stdio/index.html
für fopen() und Co

sowie
http://www.cppreference.com/cppio/index.html
für fstream und Konsorten.

Viele Grüße,
Jens

Danke

Hallo Jens !

Und warum nicht einfach die Funktion popen() nehmen ?
popen(): Creates a pipe and executes a command.
This functions returns a stream associated with one end of the created pipe. The other end of the pipe is associated with the spawned command’s standard input or standard output.

mfg
Christof