似乎在标准中找不到
setenv
的定义或类似的东西。
而
getenv
似乎存在并且可以在 Windows 和 posix 标准库中移植使用。
简而言之,是否有理由或讨论来解释为什么会这样?
getenv()
很有用您可以使用它来获取环境数据作为程序的输入。这是 shell 环境表的主要目的 — 为用户提供一种修改系统程序行为的方法。
例如,在 Linux 上,
$LS_COLORS
环境变量是一种使用 ls
(列表目录)程序修改用于显示目录信息的颜色的方法。每个用户都可以设置自己喜欢的配色方案,以在使用 ls
显示文件列表时使用,即使 ls
是一个 system 程序。
putenv()
没有有用一个程序可以修改它的环境表,但它不能修改其他程序的环境表,例如父shell!这是设计使然,并且是一项安全功能。
*nixen 和 Windows 都具有 do 的功能,允许您在当前进程的环境表中添加或修改变量。这在生成子进程时很有用,可以显式初始化子进程以继承当前进程的环境表。但这样的行为在很大程度上是一种特殊的需求,因此没有充分的理由让这样的函数成为 C 标准的一部分。
过去可以在 Windows 上偷偷修改其他进程的环境表,前提是您有足够的权限这样做,但自 XP 左右以来,这种行为变得更加困难。