【问题标题】:Changing a environmental variable through a C program通过 C 程序更改环境变量
【发布时间】:2012-07-29 14:30:59
【问题描述】:

任何人都知道如何通过 C 程序更改 Linux 环境变量?我不想更改为执行该程序而复制的环境变量。我希望能够从 C 程序中更改它的值,然后在 linux 中执行命令“env”时,我可以看到它的值发生了变化。

有什么建议吗?

【问题讨论】:

    标签: c variables posix environment


    【解决方案1】:

    我不想更改复制的环境变量 该程序的执行。我希望能够改变它的价值 从 C 程序,然后在 linux 中执行命令“env”时,我 可以看到它的值改变了

    你不能。 您只能更改自己流程的环境。你永远无法接触到父母的环境。换句话说,您所做的任何事情(设置/清除环境变量、更改本地目录等)对于父进程都是不可见的。

    标准明确规定:

    setenv() 函数应更新或添加一个变量 调用进程的环境

    改变父母环境的唯一方法是让它自己去做。

    【讨论】:

    • 但是我不久前在stackovewflow中看到了这篇文章:使用System.Environment类。 System.Environment.GetEnvironmentVariable () 和 System.Environment.SetEnvironmentVariable() 方法将为您完成这项工作。我只是不知道如何调用这些方法
    • @user1486033 你注意到这是C,而不是Java?
    • 顺便说一句 system("export VAR=value"); 怎么样?
    • @H2CO3 我以为system 正在使用新流程?不确定。
    • @H2CO3 是的,但您只能调用 subshel​​l
    【解决方案2】:

    请参阅 POSIX 函数 setenvputenv

    setenvhttp://pubs.opengroup.org/onlinepubs/009604599/functions/setenv.html

    putenvhttp://pubs.opengroup.org/onlinepubs/009604599/functions/putenv.html

    正如 POSIX 所说 setenv() 函数优于此函数。 (putenv)

    我不想更改为执行该程序而复制的环境变量。

    正如@cnicutar 在他的回答中所说,您只能更改当前进程的环境变量,而不能更改其父进程或其他进程的环境变量。

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多