当我调用execvp
时,例如execvp(echo, b)
其中 b 是命令 a 的参数数组,稍后更改此数组会影响之前进行的 execvp 调用吗?当我尝试调用 execp(echo, b) 时,它最终打印出 (null) 而不是 b 内的内容。谁能指出正确传递论点的原因以及我必须做些什么?
问问题
30555 次
2 回答
12
在您致电exec()
或其中一个亲戚之后,您的原始程序将不复存在。这意味着该程序中的任何内容都不会影响exec()
调用后的任何内容,因为它永远不会运行。也许您没有正确构建参数数组?这是一个快速工作示例execvp()
:
#include <unistd.h>
int main(void)
{
char *execArgs[] = { "echo", "Hello, World!", NULL };
execvp("echo", execArgs);
return 0;
}
、和函数提供指向以空字符结尾的字符串的指针数组
execv()
,这些字符串表示新程序可用的参数列表。按照惯例,第一个参数应该指向与正在执行的文件关联的文件名。指针数组必须由指针终止。execvp()
execvpe()
NULL
一个常见的错误是跳过关于“第一个参数,按照惯例,应该指向与正在执行的文件关联的文件名”的部分。那是确保echo
“回声”作为的部分argv[0]
,这可能取决于它。
于 2012-01-11T22:58:17.567 回答
0
请记住,exec
调用后您的程序会被一个新程序交换。它不再执行,因此exec
调用后同一进程中的任何代码实际上都无法访问。
您确定 b 数组以 NULL 终止吗?最后一个元素必须为 NULL 才能使 exec 正常工作。另外,请记住将您的第一个参数也设置为“echo”(它是 argv[0])。
尝试
execlp("echo", "echo", "something", NULL);
顺便说一句,execlp
使用起来更舒服一些,您可以传递任意数量的参数。
于 2012-01-11T22:57:29.830 回答