2013-07-09 76 views
0

我試圖執行類似於文件:Execlp - 軌跡糾正

./foo bar baz band 

executable = "foo" 
path_executable =" bar baz band" 

而且我使用的snprintf來連接,然後使用execlp

創建一個進程
snprintf(final_executable, sizeof final_executable, "%s%s%s","./",executable,path_executable); 
snprintf(for_execlp, sizeof for_execlp,"%s%s","./",executable); 

這是我根據以前的知識嘗試過的。我不能正確執行應用程序foo

execlp(for_execlp,for_execlp,path_executable, (char *)0); 

你能告訴我錯誤在哪裏..我卡在這裏!

My complete Code

在命令行我需要執行下面的命令:

./blackscholes 1 /parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt prices.txt 
+0

'path_executable =「bar baz band」'不明白,是不是'path_executable =「bar/baz/band」'? –

+0

不,他們是該應用程序的參數 – pistal

回答

0

什麼是final_executablefor_execlp?您將sizeof final_executable作爲大小參數傳遞給snprintf(),但final_executable可能是char *,因此sizeof將評估爲指針的大小,而不是可用存儲的大小。

您是否正在檢查snprintf()調用的返回值?

另外,「無法正確執行應用程序foo」是什麼意思?如果execlp()失敗,返回值是多少?


更新基於代碼的http://pastebin.com/vyrxWWLK

精細。所以,從main(),你可以調用函數run_apps("blackscholes"," 1 /parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt prices.txt")。在run_apps()中,你爲你的字符串創建了數組,所以sizeof是正確的。您使用snprintf()"/parsec/parsec-3.0/pkgs/apps/blackscholes/inst/arm-linux.gcc/bin/"寫入path_to_executable數組中,並將chdir()寫入。然後你snprintf()"./blackscholes 1 /parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt prices.txt"final_executable陣列,毫無意義,然後寫入字符串"./blackscholes"for_execpl數組,然後調用execlp(for_execlp,for_execlp,path_executable, (char *)0);,這將擴展爲execlp("./blackscholes","./blackscholes"," 1 /parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt prices.txt", NULL);。請注意,第一個(也是唯一的)命令行參數是" 1 /parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt prices.txt",那是你的意圖嗎?

無論其,你是不是檢查execlp()的返回值,你還沒有說什麼「不能正確地執行應用程序foo」對你意味着什麼......因此,儘管可能是你的問題與Grijesh Chauhan指出的一樣,你只是錯誤地使用了execlp()。但是,execlp()實際上可能會失敗,在這種情況下,您需要處理您的代碼沒有執行的潛在錯誤。

+0

'final_executable'定義我在'bash'上執行它的方式, 'for_execlp'是'。/ foo'。 'final_executable'是一個字符數組。 – pistal

+0

通過檢查snprintf的返回值是什麼意思。我打印了final_executable和for_execlp的值,它們是正確的。 – pistal

+1

請發佈[完整示例](http://sscce.org)。 –