Problem mit system()
-
Hi @ all,
Sehr seltsames Problem:
char command[MAXLENGTH]; sprintf(command,"zcat %s > %s",argv[1],filename); printf("\n %s \n",command); printf("%d",system(command)); free(command);
Dieses Programm funktioniert einwandfrei.
strcpy(filename,argv[1]); if(strncmp(argv[1],"../",3)==0) { pre = strrchr(filename,'/'); post = strtok(pre,"."); strcat(post,".ufddr"); strcpy(post,filename); } else { pre = strtok(filename,"."); strcat(pre,".ufddr"); strcpy(filename,pre); } sprintf(command,"zcat %s > %s",argv[1],filename); system(command); free(command);
Das hier liefert den wert 32512 zurück von dem system() , wenn ich den string ausgebe und in die kommando-zeile kopiere macht er auch was er soll, aber nicht wenn ich es in dem programm integriert habe.
weiss da zufällig jemand den fehler???? wäre super!
-
Erstmal: free() solltest du nur mit Speicherbereichen aufrufen, die du von malloc() bekommen hast - ein lokales Array darfst (und mußt) du nicht mit free freigeben.
Zweitens: Was ist der genaue Sinn des if-Blocks in Programm 2? Und hast du mal nachgesehen, ob der Befehlsstring dort richtig zusammengesetzt wurde?
-
okay, dann lösche ich das free() einfach raus.
also die strings werden exakt richtig zusammengesetzt.
sinn dahinter:
entpacken einer datei unter unix.
command ist z.b.: zcat abc.ufddr.gz > abc.ufddr
(daher baue ich mir den hinteren teil zusammen, wo ich nur das .gz weglösche)ich hab mit printf den string ausgegeben, der ist korrekt.
wenn ich den einfach manuell in die kommandoline kopiere geht es auch.
aber in dem code macht er es einfach nicht
-
manu1984 schrieb:
entpacken einer datei unter unix.
command ist z.b.: zcat abc.ufddr.gz > abc.ufddrich hab mit printf den string ausgegeben, der ist korrekt.
wenn ich den einfach manuell in die kommandoline kopiere geht es auch.
aber in dem code macht er es einfach nichtHi Manu,
laut manpage von system() kommt der Returncode vom aufgerufenen Kommando.http://www.die.net/doc/linux/man/man3/system.3.html
The value returned is -1 on error (e.g. fork() failed), and the return status of the command otherwise
Wie sieht denn das Environment aus? Ist es identisch?
Ich denke mal das dort eher das Problem liegt....Schaue auch Posting hierzu:
http://www2.list.logwatch.org:81/pipermail/logwatch-devel/2005-February/000764.htmlGreetz
codefrag
-
alles exakt identisch!!!
ich weiss, dass der return code aus der system() funktion kommt, der müsste 0 sein, wenn es korrekt ausgeführt wurde.
-
manu1984 schrieb:
alles exakt identisch!!!
ich weiss, dass der return code aus der system() funktion kommt, der müsste 0 sein, wenn es korrekt ausgeführt wurde.
Gib doch bitte mal den kompletten Pfad von zcat an.
Greetz