[SOLVED]Frage zu exec* in C



  • Hallo

    Ich möchte in einem C Programm eine andere Application(z.B foobar) starten mit
    execl? oder execlp ? o. execle, o. execv, o. execvp?

    jedenfalls liegt mei Problem darin das, die gestartete Application ein Parameter
    übergeben werden soll welches intern für foobar argc=1 (als ob es kein parameter hätte) und in argv[0] der Parameter steht statt wie sonst üblich der name der App foobar.

    Anders ausgedrückt

    Normalerweise wenn ich foobar starte: "foobar foo1"
    ist:
    argc = 2 und argv[0]=foobar argv[1]=foo1

    wunsch:
    argc = 1 und argv[0]=foo1

    Ich hab die Man page von exec* gelesen und konnte leider das Problem nicht selbst lösen.



  • Du solltest deine Fragen verständlicher stellen. 🙄

    Je nach exec* Variante erfolgt die Übergabe der Parameter unterschiedlich. In jedem Fall ist der 0te Parameter den du übergibst argv[0]

    also zB.

    execlp("foobar", "foo1", 0x0);
    

    siehe man: execlp



  • Warum nicht system ("prog parm &");



  • Aus man execv:

    Die exec-Bibliotheksfunktionen ersetzen den aktuellen Programmcode im
    Speicher mit neuem Programmcode.

    Willst du das wirklich?



  • @knivil
    daher vorher ein man: vfork

    pid_t pid = vfork();
    if(pid == -1) {
      perror("vfork");
      return 1;
    }
    else if(pid == 0) {
      if(execlp("foobar", "foo1", 0x0) == -1) {
        perror("execlp");
        _exit(1);
      }
    }
    

    @pferdefreund
    Mit system bekommt er nicht das hin, was er vorhat, wenn ich ihn richtig verstanden habe. Außerdem ist system keine tolle Funktion. Startet erst eine Shell, die dann den Parameter interpretiert.



  • Stellt sich nur noch die Frage, warum der Parameter nicht in argv[1] stehen darf.



  • Vielen dank es funktioniert einwandfrei!


Anmelden zum Antworten