2012-09-26 16 views
16

我有VLC(程序複製視頻) 如果我在shell中鍵入:如何用正確的參數在C中調用execl()?

/家/ VLC「/家/我的電影/電影我想see.mkv」

它開闢了再現電影。

然而,當我運行下面的程序:

#include <unistd.h> 

int main(void) { 

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

    return 0; 
} 

VLC打開了,但不復制什麼。我該如何解決這個問題?

事情我想:

我猜

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

相當於在shell中鍵入:

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

不工作,所以我嘗試

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

and vlc o筆但不重現。

而不是在最後寫入NULL我試圖0,(char *)0,1 ....沒有幫助。 幫助!!!!

+1

爲什麼在失敗的execl後面看'errno'?它會告訴你更多關於你的問題。仔細閱讀execl的手冊頁變成了什麼? :-) – Jens

回答

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

您需要指定所有參數,包括argv[0]這不是從可執行文件中提取的。

還要確保最後的NULL變成char*

詳情請看這裏:http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html

+0

它已經解決了!謝啦!我花了幾個小時在這一個..... –

+1

s /令牌/採取? – Jens

+0

@Jens,固定。如果你發現有什麼不好的事,請不要猶豫。 – AProgrammer

1

如果你只需要執行您的VLC播放過程中,只有當它完成,沒有什麼更復雜的,那麼我想你可以只用把控制權交還給應用程序的過程:

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

+0

在修正execl參數中的輕微誤解和編寫一個正確引用的函數以便shell可以撤消引用之間,我知道我更喜歡什麼。 – AProgrammer

+0

我想我明白你的意思,你的選擇是合理的。但是在處理這樣簡單的需求時,除了避免在system()中使用escape escape backslashes之外,還有沒有其他的好處可以使用execl()而不是system()? –

+0

可能存在安全原因,例如,如果你有一個像''sprintf(buf,「ls -la%s」,var)''這樣的''你用'system(buf)''執行的字符串,有人可以給你一個文件名,''somefile; rm -rf〜「',例如。 – netigger

相關問題