c - Execlp - 路径修正

标签 c linux exec

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

./foo bar baz band

哪里

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

我正在使用 snprintf 来连接,然后使用 execlp fork 一个进程

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 rates.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 rates.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 rates.txt", NULL);。请注意,第一个(也是唯一的)命令行参数是“1/parsec-3.0/pkgs/apps/blackscholes/run/in_10M.txt rates.txt”,这是您想要的吗?

但是,您没有检查 execlp() 的返回值,并且您仍然没有说出“无法正确执行应用程序 foo”对您意味着什么...因此,虽然您的问题很可能如 Grijesh Chauhan 所指出的那样,但您只是错误地使用了execlp()。但是,execlp() 实际上可能会失败,在这种情况下,您需要处理该潜在错误,而您的代码并未执行此操作。

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

相关文章:

C:为什么会出现这个Segmentation Fault?

c - 扩展装配中 cmpxchg16b 的不可能约束

c - c中的递归二进制搜索

regex - Grep 在 OpenBSD 和 Linux 中的行为不同。无法使命令工作

linux - split命令在文件名末尾添加 "?"

sql - 将临时表传递给 EXEC sp_executesql

c - 艰难调试神秘的git+ssh+proxy失败 "bash: No such file or directory"

asp.net - 你调用的对象是空的。在 Guid.Parse 上

C - exec 是否必须在多线程进程中立即跟随 fork?

linux - 带有 plesk 的 Linux Ubuntu 上的多个 svn 存储库