Search code examples
cexecexternalquotesunistd.h

How to call execl() in C with the proper arguments?


i have vlc (program to reproduce videos) if i type in a shell:

/home/vlc "/home/my movies/the movie i want to see.mkv"

it opens up an reproduces the movie.

however, when I run the following program:

#include <unistd.h>

int main(void) {

  execl("/home/vlc", "/home/my movies/the movie i want to see.mkv",NULL);

  return 0;
}

vlc opens up but doesn't reproduce anything. How can I solve this?

Things I tried:

I guessed

execl("/home/vlc", "/home/my movies/the movie i want to see.mkv",NULL);

was equivalent to typing in the shell:

/home/vlc /home/my movies/the movie i want to see.mkv

which doesn't work, so i tried

 execl("/home/vlc", "\"/home/my movies/the movie i want to see.mkv\"",NULL);

and vlc opens up but doesn't reproduce either.

Instead of writing NULL at the end I tried 0, (char*) 0, 1 .... not helpful. Help!!!!


Solution

  • execl("/home/vlc", 
      "/home/vlc", "/home/my movies/the movie i want to see.mkv", 
      (char*) NULL);
    

    You need to specify all arguments, included argv[0] which isn't taken from the executable.

    Also make sure the final NULL gets cast to char*.

    Details are here: http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html