c/c++语言开发共享处理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使用起来会更舒服,你可以传递任意数量的参数。

    需要了解更多c/c++开发分享处理execvp的参数数组?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)

      以上就是c/c++开发分享处理execvp的参数数组?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/979321.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐