0

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

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

你能告诉我错误在哪里吗..我被困在这里!

我的完整代码

在命令行上,我需要执行以下命令:

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

1 回答 1

0

final_executable和是什么for_execlp?您将sizeof final_executable作为 size 参数传递给snprintf(),但final_executable可能是 a 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_executablechdir()snprintf()"./blackscholes 1 /parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt prices.txt"final_executable"./blackscholes"for_execplexeclp(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()实际上可能会失败,在这种情况下,您需要处理您的代码没有执行的潜在错误。

于 2013-07-09T16:30:49.353 回答