处理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
使用起来会更舒服,你可以传递任意数量的参数。