c/c++语言开发共享了解执行和设置环境变量的要求

我们在解释老师方面遇到了很多麻烦。 我们要求澄清并从他那里得到以下回复

这与我在Stack Overflow上的以下post有关(阅读这篇文章将帮助您理解我想要做的事情):

使用execve的新路径运行ls命令

我们对此非常困惑。 我将再一次解释我们现在要做的事情。 类似于Linux shell的工作方式,我们需要编写自己的程序,可以设置环境变量,如PATH和USER以及用户想要定义的其他任何变量。

你将如何调用它的一个例子是(在你的程序中提示):

mysetenv dog spike 

这将创建一个看起来像“dog = spike”的环境变量

更重要的是,我们需要能够设置自己的PATH变量并将其发送到exec命令。 这是令人困惑的部分,因为基于我们所有的问题,我们不明白我们应该做什么。

    它实际上非常简单。 您已经知道您的参数是一个char *列表,由NULL指针终止。 类似地,环境只是一个char *列表,由NULL指针终止。 通常,列表中的值采用VARNAME=var-value的forms,但如果您愿意,也可以传递其他格式。

    那么,举一个简单的案例:

     #include  #include  int main(void) { char *argv[] = { "/bin/sh", "-c", "env", 0 }; char *envp[] = { "HOME=/", "PATH=/bin:/usr/bin", "TZ=UTC0", "USER=beelzebub", "LOGNAME=tarzan", 0 }; execve(argv[0], &argv[0], envp); fprintf(stderr, "Oops!n"); return -1; } 

    在这个例子中,程序将使用参数-cenv运行/bin/sh ,这意味着shell将运行在其当前PATH上找到的env程序。 此处的环境设置为包含正统格式的5个值。 如果将env更改为date (或env; date ),您将看到TZ设置的效果,例如。 当我在MacOS X机器上运行时,输出为:

     USER=beelzebub PATH=/bin:/usr/bin PWD=/Users/jleffler/tmp/soq TZ=UTC0 SHLVL=1 HOME=/ LOGNAME=tarzan _=/usr/bin/env 

    shell已经将环境变量SHLVL_PWD到我在execve()调用中显式设置的变量。

    您还可以执行更高级的操作,例如从真实环境中复制某些其他环境变量,这些环境变量与您要显式设置的环境变量不冲突。 您还可以在环境中玩单个变量的两个值的游戏 – 哪一个生效? 你可以玩包含空格的变量名称的游戏(shell不喜欢那么多),或者根本不匹配’varname = value’符号的条目(没有等号)。

    我在这里参加派对有点晚了,但是如果你想保留旧的环境变量以及创建自己的环境变量,请使用setenv ,然后将environ传递给execve()

      setenv("dog", "spike", 1); extern char** environ; execve(argv[0], argv, environ); 

    environ是在unistd.h声明的变量,它在此运行过程中跟踪环境变量。

    setenv()putenv()修改environ ,所以当你通过execve()传递它时,环境变量将正如你所期望的那样。

    除非您想要更改PWD (工作目录)变量,否则Jonathan Leffler的代码效果很好。

    为了更改工作目录,我所做的是在execve(..)之前放一个chdir(..) execve(..)并调用:

    需要了解更多c/c++开发分享了解执行和设置环境变量的要求,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

     chdir("/foo/bar"); execve(argv[0], &argv[0], envp); 

      以上就是c/c++开发分享了解执行和设置环境变量的要求相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979801.html

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

      精彩推荐