Archiv verlassen und diese Seite im Standarddesign anzeigen : Der funktion system() ein Argument übergeben
Sector1379
07-11-2005, 19:01
Hallo zusammen,
ich habe mal eine kleine Frage an euch. Wie schaffe ich es der Funktion system() ein Argument übergeben ??? Ist das überhaupt möglich oder gibt es eine besser Funktion um ein Programm aus einem C Programm aufzurufen und diesem ein argument zu übergeben.
Gruß
Sector
Hallo zusammen,
ich habe mal eine kleine Frage an euch. Wie schaffe ich es der Funktion system() ein Argument übergeben ??? Ist das überhaupt möglich oder gibt es eine besser Funktion um ein Programm aus einem C Programm aufzurufen und diesem ein argument zu übergeben.
Gruß
Sector
system("ls -la --color=tty");
Das wird alles per /bin/sh aufgerufen.
Sector1379
07-11-2005, 22:27
Hi
Danke für deine Antwort aber das war nicht ganz das was ich meinte. Also ich gebe mal ein Beispiel:
Ich rufe die Funktion wie folgt auf:
system("tar xjvf");
So, jetzt ist es ja so das hinter diesem Befehl der Dateiname normal kommen müßte und genau darauf bezieht sich meine Frage. Den Namen fange ich ab und speicher ihn in eine Variable. Nun will ich den Inhalt also den Namen an den System aufruf übergeben.
Also so würde man es dann per Hand in die Shell eingeben:
tar xjvf dateiname.tar.bz2
Und an dieser Stelle weiß ich nicht weiter.Wie genau macht man das ?? Ich hoffe ihr versteht wie ich das meine.
Gruß
Sector
Hi
Danke für deine Antwort aber das war nicht ganz das was ich meinte. Also ich gebe mal ein Beispiel:
Ich rufe die Funktion wie folgt auf:
system("tar xjvf");
So, jetzt ist es ja so das hinter diesem Befehl der Dateiname normal kommen müßte und genau darauf bezieht sich meine Frage. Den Namen fange ich ab und speicher ihn in eine Variable. Nun will ich den Inhalt also den Namen an den System aufruf übergeben.
Also so würde man es dann per Hand in die Shell eingeben:
tar xjvf dateiname.tar.bz2
Und an dieser Stelle weiß ich nicht weiter.Wie genau macht man das ?? Ich hoffe ihr versteht wie ich das meine.
Gruß
Sector
C? C++?
Hier was in C:
char* dateiname="foo.tar.gz";
char* buf=malloc((9+strlen(dateiname))*sizeof(char));
sprintf(buf, "tar xvzf %s", dateiname);
system(buf);
free(buf);
Oder in C++:
std::string dateiname("foo.tar.gz");
system(std::string("tar xvzf "+dateiname).c_str());
C, wer lesen kann...
BLUESCREEN3D
08-11-2005, 17:37
char* buf=malloc((9+strlen(dateiname))*sizeof(char));
sprintf(buf, "tar xvzf %s", dateiname);
Böser Fehler: Du hast für das abschließende NULL-Byte keinen Speicherplatz reserviert!
Es müsste heißen:
char* buf=malloc((10+strlen(dateiname))*sizeof(char));
Allerdings würde ich für sowas eher strcat benutzen.
Sector1379
08-11-2005, 19:12
Vielen vielen dank Leute hat super geklappt.
Gruß Sector
char* dateiname="foo.tar.gz";
char* buf=malloc((9+strlen(dateiname))*sizeof(char));
sprintf(buf, "tar xvzf %s", dateiname);
system(buf);
free(buf);
Oder gleich
char *buf = malloc(1025);
snprintf(buf, 1024, "tar xvzf %s", dateiname);Statt malloc wäre natürlich alloca besser, aber leider ist die Funktion oft buggy.
Oder gleich char buf[1025];
Oder gleich
char *buf = malloc(1025);
snprintf(buf, 1024, "tar xvzf %s", dateiname);Statt malloc wäre natürlich alloca besser, aber leider ist die Funktion oft buggy.
Oder gleich char buf[1025];
Ich würde alloca garnicht erwähnen/vewrwenden, gibt zuviele probleme damit:
...
The inlined code often consists of a single instruction adjusting the
stack pointer, and does not check for stack overflow. Thus, there is
no NULL error return.
BUGS
The alloca function is machine and compiler dependent. On many systems
its implementation is buggy. Its use is discouraged.
On many systems alloca cannot be used inside the list of arguments of a
function call, because the stack space reserved by alloca would appear
on the stack in the middle of the space for the function arguments.
siehe man alloca (http://unixhelp.ed.ac.uk/CGI/man-cgi?alloca)
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.