2012-09-26 27 views
16

que tengo VLC (programa para reproducir videos) si escribo en un shell:Cómo llamar a execl() en C con los argumentos adecuados?

/home/VLC "/ home/mi/películas de la película que quiero see.mkv"

se abre un reproduce la película. Sin embargo

, cuando corro el siguiente programa:

#include <unistd.h> 

int main(void) { 

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

    return 0; 
} 

VLC abre pero no reproduce nada. ¿Como puedo resolver esto?

cosas que intenté:

supuse

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

era lo mismo que escribir en la cáscara:

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

que no funciona, así que traté

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

y vlc o saca plumas pero tampoco se reproduce.

En lugar de escribir NULL al final intenté 0, (char *) 0, 1 ... no útil. Ayuda !!!!

+1

¿Por qué no miraste 'errno' después del execl fallido? Te habría contado más sobre tu problema. ¿Qué ha sido de leer cuidadosamente la página de manual para execl? :-) – Jens

Respuesta

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

Es necesario especificar todos los argumentos, incluidos argv[0] que no se toma desde el ejecutable.

También asegúrese de que el NULL final se convierte en char*.

detalles están aquí: http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html

+0

¡está resuelto! ¡gracias hombre! Pasé horas en este ... –

+1

s/token/tomado? – Jens

+0

@Jens, arreglado. No dude en arreglarlo si ve algo malo. – AProgrammer

1

Si necesita sólo para ejecutar su proceso de reproducción de VLC y sólo dar el control de nuevo a su proceso de aplicación cuando se hace y nada más complejo, entonces supongo que puede utilizar simplemente:

system("The same thing you type into console");

+0

Entre corregir el ligero malentendido en los argumentos execl y escribir una función que citará correctamente para que el shell pueda deshacer la cita, sé lo que prefiero. – AProgrammer

+0

Creo que entiendo su punto y su preferencia es razonable.Pero cuando se trata de necesidades tan simples, ¿hay otros beneficios de usar execl() en lugar de system(), además de evitar jugar con las barras invertidas de secuencia de escape en system()? –

+0

Puede haber razones de seguridad, si tiene por ejemplo una cadena creada como 'sprintf (buf," ls -la% s ", var)' que ejecuta con 'system (buf)', alguien podría darle un nombre de archivo , '" somefile; rm -rf ~ "', por ejemplo. – netigger

Cuestiones relacionadas