2016-05-11 15 views
1

Ich muss eine Datei in einen Pfad gzip. Was ich tun möchte, ist dies:Execute in C mit gzip

gzip -9c example.txt > /home/paulo/new_name 

Wenn ich dies tun, indem und es funktioniert perfekt in Ordnung, aber ich bin mit einem execlp dies in c auszuführen:

execlp("gzip","gzip","-9c",file,">",path,NULL); 

Aber wenn ich diese execlp ich bekomme zufällige Zeichen auf stdout. Ich drucke nur Datei- und Pfad zu überprüfen, ob beide richtig war:

printf("%s, %s\n",file,path); 

Und ich habe dies:

example.txt, /home/paulo/new_name 

Kann mir jemand sagen, was ich falsch mache?

+2

Der Shell-Umleitungsbefehl ">" ist kein * Argument zu 'execlp' * und ist höchstwahrscheinlich Ihr Fehler. – usr2564301

+1

Die Umleitung, wie Sie es versuchen, ist eine Funktion einiger * Shells *. Es ist nicht etwas, das 'exec' tut. Wenn Sie Ihre eigenen Prozesse "ausführen" möchten, müssen Sie stdout selbst wieder öffnen. –

+0

Gibt es eine Möglichkeit, eine Datei in einen Pfad zu komprimieren und die ursprüngliche Datei ohne Umleitung zu behalten? –

Antwort

3

Eine Möglichkeit, es zu tun ist, um die Schale zu rufen:

execl("/bin/sh", "/bin/sh", "-c", "gzip -9c example.txt > /home/paulo/new_name", NULL); 

, die ähnlich ist, was die system Funktion tut. So eine andere Option ist:

exit(system("gzip -9c example.txt > /home/paulo/new_name"));