使用全局变量'char ** environ'来实现setenv()和unsetenv()

时间:2016-07-05 07:09:19

标签: c unix

我被要求(作为一个项目)在中实施setenv()unsetenv()

我正在为我正在建造的迷你壳做这件事。我知道我可以直接访问环境变量(extern char **environ),因为我用它来实现getenv()

我的问题是,如何在上面指出的环境变量中添加一个值?

我不需要代码只是一个关于如何或链接到可以帮助的地方的想法,我只能使用environ来实现。

我到处寻找,一无所获。感谢。

2 个答案:

答案 0 :(得分:2)

environ添加新变量的方式如下:

  1. 计算环境包含的变量数。将此号码存储在 n。
  2. n 分配缓冲区+指向char的2个指针。
  3. 将原始environ复制到新环境。
  4. 将新变量追加到最后。
  5. 请勿忘记使用\0终止数组。
  6. environ设置为指向新数组。
  7. 如果您分配了之前的environ,则现在可以free
  8. 在你自己的shell中,你可以做自己的簿记,以确保你不需要一直为environ分配新的缓冲区(例如,通过分配一个稍微大一点的数组并保持有多少条目是免费的)。

答案 1 :(得分:1)

因为你不想要代码(;

http://man7.org/tlpi/code/online/book/proc/setenv.c.html

您可以看到setevn在内部使用putenv,后者又使用__add_to_environ内部函数来执行此操作。请参阅此处的代码:

http://osxr.org:8080/glibc/source/stdlib/setenv.c