处理execvp的参数数组?

当我调用execvp ,例如execvp(echo, b) ,其中b是命令a的参数数组,稍后更改此数组是否会影响先前执行的execvp调用? 当我尝试调用execp(echo,b)时,它最终打印出来(null)而不是b中的内容。 任何人都可以指出为什么以及我必须做什么才能正确传递参数?

在调用exec()或其中一个亲属之后,您的原始程序就不再存在了。 这意味着在exec()调用之后,该程序中的任何内容都不会影响任何内容,因为它永远不会运行。 也许你没有正确构建你的参数数组? 这是execvp()的一个快速工作示例:

 #include  int main(void) { char *execArgs[] = { "echo", "Hello, World!", NULL }; execvp("echo", execArgs); return 0; } 

execvp()手册页 :

execv()execvp()execvpe()函数提供指向以null结尾的字符串的指针数组,这些字符串表示新程序可用的参数列表。 按照惯例,第一个参数应指向与正在执行的文件关联的文件名。 指针数组必须NULL指针终止。

一个常见的错误是跳过关于“第一个参数,按惯例,应该指向与正在执行的文件相关联的文件名”的部分。 这是确保echo argv[0]一样“回声”的部分,这可能是它所依赖的。

请记住,在exec调用之后,您的程序将由新的程序进行交换。 它不再执行,因此exec调用后同一进程中的任何代码实际上都是无法访问的。

你确定b数组以NULL结尾吗? 最后一个元素必须为NULL才能使exec正常工作。 另外,请记住将第一个参数设置为“echo”(它是argv [0])。

尝试

 execlp("echo", "echo", "something", NULL); 

顺便说一句, execlp使用起来会更舒服,你可以传递任意数量的参数。