Wie kann ich die execv-Funktion erfolgreich aufrufen?

Wie kann ich die execv-Funktion erfolgreich aufrufen?

Ich versuche, ein Programm zu erstellen, das Datei1 auf folgende Weise in Datei2 kopiert:

cp -i -p file1 file2

Nun rufe ich meine ausführbare Kopie auf und rufe

copy file1 file2

Es bewirkt dasselbe wie der erste Befehl (-i und -p).

Ich konnte dies tun mitexecl

char const *copy[] = {"/bin/cp","cp","-p","-i",0};

execl(copy[0],copy[1],copy[2],copy[3],argv[1],argv[2],copy[4]);

Aber ich möchte es jetzt tun mitexecv

Ich habe die Manpage der exec*-Funktionen gesehen

execl(const char *path, const char *arg, ...);

execv(const char *path, char *const argv[]);

und so scheint das erste Argument das gleiche zu sein, jedoch,

Wie das zweite Argument für execvistchar *const argv[]

was muss ich an der execvFunktion ändern, um das gleiche Ergebnis zu erhalten?

Meine Hauptfunktionsargumente sehen wie folgt aus:

main(int argc,char * argv[])

Antwort1

Ändern Sie Ihr copyArray und den Funktionsaufruf. Das Folgende ist ein Minimalbeispiel:

#include <unistd.h>

int main(int arcg, char *argv[])
{
    char *const args[] = {"cp","-p","-i", argv[1], argv[2], 0}; 
    execv("/bin/cp", args);
}

verwandte Informationen