我正在尝试执行类似于以下内容的文件:

./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

最佳答案

什么是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()实际上可能会失败,在这种情况下,您需要处理该潜在错误,而您的代码没有这样做。

关于c - 执行-路径校正,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17553261/

10-12 05:54