我正在尝试执行类似于以下内容的文件:
./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_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"
,这是您想要的吗?
但是,您没有检查execlp()
的返回值,而您仍然没有说“无法正确执行应用程序foo
”对您意味着什么……因此,很可能您的问题是正如Grijesh Chauhan指出的那样,您只是错误地使用了execlp()
。但是,execlp()
实际上可能会失败,在这种情况下,您需要处理该潜在错误,而您的代码没有这样做。
关于c - 执行-路径校正,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17553261/