2013-04-22 63 views
0

我使用的glibc版本沒有execvpe函數。但是,我需要確切的功能來實現我正在嘗試的功能。用戶將傳入一個參數列表,這是他們的linux命令供我運行(使用它的參數列表)。這裏是什麼樣子:我怎樣才能像execvpe一樣使用exea和va_list?

foo.c的

int main(int argc, char *argv[], char *envp[]) 
{ 
    char * newenvp[] = ...; 
    execvpe(argv[1], &argv[1], newenvp); 
} 

使用示例

foo echo -e "Hello World.\n" 

有一種解決方法,以取代execvpeexecle

+0

這是不可能的,因爲在編譯時確定的變量參數的數量,但可以在運行時確定一個空終止數組的大小。 – 2013-04-22 15:37:52

回答

0

我相信我已經解決了我自己的問題。使用execvpe的解決方法是使用setenv,然後使用execvp。我相信功能是相同的:

int main(int argc, char *argv[], char *envp[]) 
{ 
    setenv("MYVAR", "MYVALUE", 1); 
    /* More calls to setenv can be used if needed. */ 
    execvp(argv[1], &argv[1]); 
} 
+0

請注意,在調用'execvp' _is之前更改環境變量與缺少'execvpe'函數不同。具體來說,如果新環境改變'PATH'變量,那麼'execvp'可能最終執行一個不同的程序。在執行環境切換之前,'execvpe'總是搜索當前的'PATH'變量。 – 2014-09-18 19:20:52