Execlp - 路径校正

时间:2013-07-09 16:17:02

标签: c linux exec

我正在尝试执行类似于:

的文件
./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

1 个答案:

答案 0 :(得分: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"。请注意,第一个(也是唯一的)命令行参数是foo,这是您的意图吗?

HOWEVER ,您没有检查execlp()的返回值,而您仍然没有说“无法正确执行应用程序execlp()”的意思对你来说......所以尽管Grijesh Chauhan指出你的问题的可能性很大,但你只是错误地使用了execlp()。但是,{{1}}实际上可能失败,在这种情况下,您需要处理您的代码未执行的潜在错误。