在C++标准中为什么定义了getenv而不定义setenv?

问题描述 投票:0回答:1

似乎在标准中找不到

setenv
的定义或类似的东西。

getenv
似乎存在并且可以在 Windows 和 posix 标准库中移植使用。

简而言之,是否有理由或讨论来解释为什么会这样?

c++ environment-variables std standards
1个回答
0
投票

getenv()
很有用

您可以使用它来获取环境数据作为程序的输入。这是 shell 环境表的主要目的 — 为用户提供一种修改系统程序行为的方法。

例如,在 Linux 上,

$LS_COLORS
环境变量是一种使用
ls
(列表目录)程序修改用于显示目录信息的颜色的方法。每个用户都可以设置自己喜欢的配色方案,以在使用
ls
显示文件列表时使用,即使
ls
是一个 system 程序。

putenv()
没有有用

一个程序可以修改它的环境表,但它不能修改其他程序的环境表,例如父shell!这是设计使然,并且是一项安全功能

*nixen 和 Windows 都具有 do 的功能,允许您在当前进程的环境表中添加或修改变量。这在生成子进程时很有用,可以显式初始化子进程以继承当前进程的环境表。但这样的行为在很大程度上是一种特殊的需求,因此没有充分的理由让这样的函数成为 C 标准的一部分。

过去可以在 Windows 上偷偷修改其他进程的环境表,前提是您有足够的权限这样做,但自 XP 左右以来,这种行为变得更加困难。

© www.soinside.com 2019 - 2024. All rights reserved.