Frage/Problem zu execv/l



  • Hi

    ich habe folgendes Problem. Meinem Programm werden zusätzlich ein paar Parameter übergeben zb 2 Dateinamen. nun möchte ich mittels execv oder execl den cp befehl aufrufen damit die 2 angegebenen Dateien in ein anderes Verzeichnis kopiert werden. Das Verzeichnis wird per #define BACKUP angegeben

    was zb ohne Probleme funktioniert ist execv("/bin/cp", argv)
    Allerdings weiß ich nicht wie ich an argv jetzt noch ein weiteres Argument anhänge (in meinem Fall das per #define Festgelegte Backupverzeichnis, damit der cp Befehl weiß wohin er die Argumente kopieren soll

    execl kommt für mich nciht in Frage weil ich vor Programmstart nicht weiß wieviele Argumente/Dateinamen der Benutzer eingibt, die ich dann kopieren soll

    Gibt es irgendeine Möglichkeit das Problem zu lösen? (habs mit strcat versucht aber funktionierte nicht)



  • so ungefähr

    size_t anzahl_der_argumente = argc + 2;
    char **args = malloc(sizeof(*argv) * anzahl_der_argumente);
    args[0] = "cp";
    for(int i = 1; i < argc; ++i) {
      args[i] = argv[i];
    }
    args[argc] = BACKUP;
    args[argc+1] = 0x0;
    if(execvp("cp", args) == -1) {
      // ...
    }
    

Anmelden zum Antworten