【发布时间】:2015-03-23 16:54:47
【问题描述】:
我刚刚阅读了有关 complexities of environ 的内容,特别是它是多么的线程不安全,因为 assign to it 可以合法地替换整个环境。
请记住,是否有任何类型的 API 用于迭代所有当前不直接使用静态 environ 数组的环境变量?
需要明确的是,我知道 getenv()、setenv() 和朋友们(关于 putenv() 的说法越少,IMO 越好)——这些只允许恢复特定变量,而不是遍历所有变量。
我还编写了大量直接遍历environ 的代码。但令我震惊的是,在任何明智的多线程应用程序中,使用该环境的唯一明智的方法是尽早在main() 中插入代码以将其插入unordered_map 或类似的,并且只从那里使用它;或者只是将它视为完全不可变的,并希望你们链接的库都不会这样做。
所以我想知道是否有任何更安全的接口被定义为 POSIX 的一部分,或者可能是特定于平台的,而我不知道这些接口?
【问题讨论】:
-
除了购物清单问题之外,是否有一个库可以做 x... 如果你想要地图之类的东西,你可以专注于 cpp,因为在标准库...
-
确实,在纯 C 语言中,您需要使用已分配的
char缓冲区数组来代替 - 但复制的原理与我的意思相同。就购物清单而言,也许 - 但 POSIX API 通常比环境处理的糟糕混乱要好。特别是在需要的地方通常有可重入的函数变体,但我认为能够修改environ的所需行为会阻碍任何将访问包装在一个好的 API 中并仍然保持兼容的努力。
标签: c++ c environment-variables posix