我正在尝试执行类似于:
的文件./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
答案 0 :(得分:0)
什么是final_executable
和for_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}}实际上可能失败,在这种情况下,您需要处理您的代码未执行的潜在错误。