How to call execl() in C with the proper arguments?
Question
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
OTHER TIPS
If you need just to execute your VLC playback process and only give control back to your application process when it is done and nothing more complex, then i suppose you can use just:
system("The same thing you type into console");