Matias Morant Matias Morant - 3 months ago 14
C Question

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!!!!

Answer
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