execv Parameter



  • Hi,

    ich habe in meinem Programm ein Array von Arrays (char arr[10][50]) und würde das gerne execv als Parameter übergeben. Das erwartet aber ein Array von Pointern.

    Gibt es da einen einfachen Weg oder komm ich nicht dran vorbei, es "per Hand" zu einem Array von Pointern umzuschreiben?

    MfG



  • perikles schrieb:

    Gibt es da einen einfachen Weg

    Was meinst du mit einfach?

    perikles schrieb:

    oder komm ich nicht dran vorbei, es "per Hand" zu einem Array von Pointern umzuschreiben?

    Das ist doch einfach.
    Denk daran, dass das Array auch NULL-Termiert sein muss.



  • DirkB schrieb:

    Denk daran, dass das Array auch NULL-Termiert sein muss.

    Ok, danke. Also ich schreibe jetzt:

    char* ptr_arr[args_count + 1];
    int i;
    
    for(i = 0; i < args_count; i++)
      ptr_arr[i] = src_array[i];
    
    ptr_arr[args_count] = NULL;
    execv(command, ptr_arr);
    

    Das kompiliert zwar, aber wenn command beispielsweise "/bin/echo" ist und im ptr_array ein char* mit "hallo" steht, macht execv gar nichts. Es funktioniert allerdings, wenn ich das Argument mit execl als Liste übergebe. Was mache ich hier noch falsch?



  • man exec schrieb:

    The first argument, by convention, should point to the filename associated with the file being executed.

    Edit:

    #include <stdio.h>
    #include <unistd.h>
    #include <errno.h>
    
    int main(int argc, char *argv[])
    {
            char* ptr_arr[3];
            ptr_arr[0] = "echo";
            ptr_arr[1] = "hello";
            ptr_arr[2] = NULL;
    
            execv("/bin/echo", ptr_arr);
    
            perror("execv failed");
    
            return 0;
    }
    


  • Danke sehr!


Anmelden zum Antworten